aeson-schema-0.3.0.2: test/Data/Aeson/LitQQ.hs
{-# OPTIONS_GHC -fno-warn-missing-fields #-}
module Data.Aeson.LitQQ
( aesonLitQQ
) where
import Control.Applicative ((*>), (<*))
import Data.Aeson.Parser (value')
import Data.Attoparsec.ByteString.Char8 (skipSpace)
import Data.Attoparsec.Lazy (Result (..), parse)
import Data.ByteString.Lazy.Char8 (pack)
import Language.Haskell.TH (ExpQ)
import Language.Haskell.TH.Quote (QuasiQuoter (..))
import Language.Haskell.TH.Syntax (lift)
import Data.Aeson.Schema.CodeGen
aesonLitQQ :: QuasiQuoter
aesonLitQQ = QuasiQuoter { quoteExp = aesonLit }
aesonLit :: String -> ExpQ
aesonLit jsonStr = case parse (skipSpace *> value' <* skipSpace) (pack jsonStr) of
Done _ json -> lift json
_ -> fail "not a valid JSON value"