packages feed

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"