module Aeson.Match.QQ
( match
, qq
, Error(..)
, Mismatch(..)
, MissingPathElem(..)
, ExtraArrayValues(..)
, ExtraObjectValues(..)
, Value(..)
, Array
, Object
, Box(..)
, TypeSig(..)
, Type(..)
, Nullable(..)
, Path(..)
, PathElem(..)
, prettyError
) where
import Data.String (IsString(..))
import qualified Data.Text.Encoding as Text
import Language.Haskell.TH.Quote (QuasiQuoter(..))
import Language.Haskell.TH.Syntax (Lift(..))
import qualified Text.PrettyPrint as PP (render)
import qualified Text.PrettyPrint.HughesPJClass as PP (Pretty(..))
import Aeson.Match.QQ.Internal.Match
( match
, Error(..)
, Mismatch(..)
, MissingPathElem(..)
, ExtraArrayValues(..)
, ExtraObjectValues(..)
, Path(..)
, PathElem(..)
)
import Aeson.Match.QQ.Internal.Parse (parse)
import Aeson.Match.QQ.Internal.Value
( Value(..)
, Box(..)
, Array
, Object
, TypeSig(..)
, Type(..)
, Nullable(..)
)
qq :: QuasiQuoter
qq :: QuasiQuoter
qq = QuasiQuoter
{ quoteExp :: String -> Q Exp
quoteExp = \String
str ->
case ByteString -> Either String (Value Exp)
parse (Text -> ByteString
Text.encodeUtf8 (forall a. IsString a => String -> a
fromString String
str)) of
Left String
err ->
forall a. HasCallStack => String -> a
error (String
"Aeson.Match.QQ.qq: " forall a. [a] -> [a] -> [a]
++ String
err)
Right Value Exp
val ->
forall t (m :: * -> *). (Lift t, Quote m) => t -> m Exp
lift Value Exp
val
, quotePat :: String -> Q Pat
quotePat =
\String
_ -> forall a. HasCallStack => String -> a
error String
"Aeson.Match.QQ.qq: no quotePat"
, quoteType :: String -> Q Type
quoteType =
\String
_ -> forall a. HasCallStack => String -> a
error String
"Aeson.Match.QQ.qq: no quoteType"
, quoteDec :: String -> Q [Dec]
quoteDec =
\String
_ -> forall a. HasCallStack => String -> a
error String
"Aeson.Match.QQ.qq: no quoteDec"
}
prettyError :: Error -> String
prettyError :: Error -> String
prettyError =
Doc -> String
PP.render forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall a. Pretty a => a -> Doc
PP.pPrint