module Data.HighJson.TH
( deriveJsonSwagger
, jsonSerializer, jsonEncoder, jsonParser
, makeDeclareNamedSchema
, ToSchema(..)
, ToJSON(..), FromJSON(..)
)
where
import Data.Aeson
import Data.Swagger
import Language.Haskell.TH
import Data.HighJson (jsonSerializer, jsonEncoder, jsonParser)
import Data.HighJson.Swagger (makeDeclareNamedSchema)
deriveJsonSwagger :: Name -> Name -> Q [Dec]
deriveJsonSwagger typ spec =
[d|
instance ToJSON $(conT typ) where
toJSON = jsonSerializer $(varE spec)
toEncoding = jsonEncoder $(varE spec)
instance FromJSON $(conT typ) where
parseJSON = jsonParser $(varE spec)
instance ToSchema $(conT typ) where
declareNamedSchema p = makeDeclareNamedSchema $(varE spec) p
|]