module Argo.QuasiQuoter where import qualified Argo.Decode as Decode import qualified Argo.Json.Value as Value import qualified Argo.Schema.Schema as Schema 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 = (String -> Q Exp) -> (Pointer -> Q Exp) -> Either String Pointer -> Q Exp forall a c b. (a -> c) -> (b -> c) -> Either a b -> c either String -> Q Exp forall (m :: * -> *) a. MonadFail m => String -> m a fail Pointer -> Q Exp forall t. Lift t => t -> Q Exp TH.lift (Either String Pointer -> Q Exp) -> (String -> Either String Pointer) -> String -> Q Exp forall b c a. (b -> c) -> (a -> b) -> a -> c . ByteString -> Either String Pointer Decode.decodePointer (ByteString -> Either String Pointer) -> (String -> ByteString) -> String -> Either String Pointer forall b c a. (b -> c) -> (a -> b) -> a -> c . Text -> ByteString Text.encodeUtf8 (Text -> ByteString) -> (String -> Text) -> String -> ByteString forall b c a. (b -> c) -> (a -> b) -> a -> c . String -> Text Text.pack } schema :: TH.QuasiQuoter schema :: QuasiQuoter schema = QuasiQuoter defaultQuasiQuoter { quoteExp :: String -> Q Exp TH.quoteExp = (String -> Q Exp) -> (Value -> Q Exp) -> Either String Value -> Q Exp forall a c b. (a -> c) -> (b -> c) -> Either a b -> c either String -> Q Exp forall (m :: * -> *) a. MonadFail m => String -> m a fail (Schema -> Q Exp forall t. Lift t => t -> Q Exp TH.lift (Schema -> Q Exp) -> (Value -> Schema) -> Value -> Q Exp forall b c a. (b -> c) -> (a -> b) -> a -> c . Value -> Schema Schema.fromValue) (Either String Value -> Q Exp) -> (String -> Either String Value) -> String -> Q Exp forall b c a. (b -> c) -> (a -> b) -> a -> c . ByteString -> Either String Value forall a. HasCodec a => ByteString -> Either String a Decode.decode (ByteString -> Either String Value) -> (String -> ByteString) -> String -> Either String Value forall b c a. (b -> c) -> (a -> b) -> a -> c . Text -> ByteString Text.encodeUtf8 (Text -> ByteString) -> (String -> Text) -> String -> ByteString 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 = (String -> Q Exp) -> (Value -> Q Exp) -> Either String Value -> Q Exp forall a c b. (a -> c) -> (b -> c) -> Either a b -> c either String -> Q Exp forall (m :: * -> *) a. MonadFail m => String -> m a fail (Value -> Q Exp forall t. Lift t => t -> Q Exp TH.lift (Value -> Q Exp) -> (Value -> Value) -> Value -> Q Exp forall b c a. (b -> c) -> (a -> b) -> a -> c . Value -> Value asValue) (Either String Value -> Q Exp) -> (String -> Either String Value) -> String -> Q Exp forall b c a. (b -> c) -> (a -> b) -> a -> c . ByteString -> Either String Value forall a. HasCodec a => ByteString -> Either String a Decode.decode (ByteString -> Either String Value) -> (String -> ByteString) -> String -> Either String Value forall b c a. (b -> c) -> (a -> b) -> a -> c . Text -> ByteString Text.encodeUtf8 (Text -> ByteString) -> (String -> Text) -> String -> ByteString forall b c a. (b -> c) -> (a -> b) -> a -> c . String -> Text Text.pack } asValue :: Value.Value -> Value.Value asValue :: Value -> Value asValue = Value -> Value forall a. a -> a id defaultQuasiQuoter :: TH.QuasiQuoter defaultQuasiQuoter :: QuasiQuoter defaultQuasiQuoter = QuasiQuoter :: (String -> Q Exp) -> (String -> Q Pat) -> (String -> Q Type) -> (String -> Q [Dec]) -> QuasiQuoter TH.QuasiQuoter { quoteDec :: String -> Q [Dec] TH.quoteDec = Q [Dec] -> String -> Q [Dec] forall a b. a -> b -> a const (Q [Dec] -> String -> Q [Dec]) -> Q [Dec] -> String -> Q [Dec] forall a b. (a -> b) -> a -> b $ String -> Q [Dec] forall (m :: * -> *) a. MonadFail m => String -> m a fail String "cannot be used as a declaration" , quoteExp :: String -> Q Exp TH.quoteExp = Q Exp -> String -> Q Exp forall a b. a -> b -> a const (Q Exp -> String -> Q Exp) -> Q Exp -> String -> Q Exp forall a b. (a -> b) -> a -> b $ String -> Q Exp forall (m :: * -> *) a. MonadFail m => String -> m a fail String "cannot be used as an expression" , quotePat :: String -> Q Pat TH.quotePat = Q Pat -> String -> Q Pat forall a b. a -> b -> a const (Q Pat -> String -> Q Pat) -> Q Pat -> String -> Q Pat forall a b. (a -> b) -> a -> b $ String -> Q Pat forall (m :: * -> *) a. MonadFail m => String -> m a fail String "cannot be used as a pattern" , quoteType :: String -> Q Type TH.quoteType = Q Type -> String -> Q Type forall a b. a -> b -> a const (Q Type -> String -> Q Type) -> Q Type -> String -> Q Type forall a b. (a -> b) -> a -> b $ String -> Q Type forall (m :: * -> *) a. MonadFail m => String -> m a fail String "cannot be used as a type" }