module Argo.Internal.QuasiQuoter where

import qualified Argo.Internal.Decode as Decode
import qualified Argo.Internal.Json.Value as Value
import qualified Argo.Vendor.TemplateHaskell as TH
import qualified Argo.Vendor.Text as Text

pointer :: TH.QuasiQuoter
pointer :: QuasiQuoter
pointer = QuasiQuoter
defaultQuasiQuoter
    { quoteExp :: String -> Q Exp
TH.quoteExp =
        forall a c b. (a -> c) -> (b -> c) -> Either a b -> c
either forall (m :: * -> *) a. MonadFail m => String -> m a
fail forall t (m :: * -> *). (Lift t, Quote m) => t -> m Exp
TH.lift
        forall b c a. (b -> c) -> (a -> b) -> a -> c
. ByteString -> Either String Pointer
Decode.decodePointer
        forall b c a. (b -> c) -> (a -> b) -> a -> c
. Text -> ByteString
Text.encodeUtf8
        forall b c a. (b -> c) -> (a -> b) -> a -> c
. String -> Text
Text.pack
    }

value :: TH.QuasiQuoter
value :: QuasiQuoter
value = QuasiQuoter
defaultQuasiQuoter
    { quoteExp :: String -> Q Exp
TH.quoteExp =
        forall a c b. (a -> c) -> (b -> c) -> Either a b -> c
either forall (m :: * -> *) a. MonadFail m => String -> m a
fail (forall t (m :: * -> *). (Lift t, Quote m) => t -> m Exp
TH.lift forall b c a. (b -> c) -> (a -> b) -> a -> c
. Value -> Value
asValue)
        forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall a. HasCodec a => ByteString -> Either String a
Decode.decode
        forall b c a. (b -> c) -> (a -> b) -> a -> c
. Text -> ByteString
Text.encodeUtf8
        forall b c a. (b -> c) -> (a -> b) -> a -> c
. String -> Text
Text.pack
    }

asValue :: Value.Value -> Value.Value
asValue :: Value -> Value
asValue = forall a. a -> a
id

defaultQuasiQuoter :: TH.QuasiQuoter
defaultQuasiQuoter :: QuasiQuoter
defaultQuasiQuoter = TH.QuasiQuoter
    { quoteDec :: String -> Q [Dec]
TH.quoteDec = forall a b. a -> b -> a
const forall a b. (a -> b) -> a -> b
$ forall (m :: * -> *) a. MonadFail m => String -> m a
fail String
"cannot be used as a declaration"
    , quoteExp :: String -> Q Exp
TH.quoteExp = forall a b. a -> b -> a
const forall a b. (a -> b) -> a -> b
$ forall (m :: * -> *) a. MonadFail m => String -> m a
fail String
"cannot be used as an expression"
    , quotePat :: String -> Q Pat
TH.quotePat = forall a b. a -> b -> a
const forall a b. (a -> b) -> a -> b
$ forall (m :: * -> *) a. MonadFail m => String -> m a
fail String
"cannot be used as a pattern"
    , quoteType :: String -> Q Type
TH.quoteType = forall a b. a -> b -> a
const forall a b. (a -> b) -> a -> b
$ forall (m :: * -> *) a. MonadFail m => String -> m a
fail String
"cannot be used as a type"
    }