gtvm-hs-1.0.0: src/GTVM/Internal/Json.hs
module GTVM.Internal.Json
( module GTVM.Internal.Json
, ToJSON(..), genericToEncoding, genericToJSON
, FromJSON(..), genericParseJSON
) where
import Data.Aeson
import Data.Aeson.Types ( Parser )
import GHC.Generics ( Generic, Rep )
-- We cheat and use the same string for both the field label and constructor tag
-- modifier, because we figure that you'll only be using this on a product type
-- or an enum-like sum type (no inner fields).
jcGtvmhs :: String -> Options
jcGtvmhs x = defaultOptions
{ fieldLabelModifier = labelMod
, constructorTagModifier = labelMod
, rejectUnknownFields = True
} where labelMod = camelTo2 '_' . drop (length x)
-- | Shortcut for genericParseJSON (gtvm-hs)
gpjg :: (Generic a, GFromJSON Zero (Rep a)) => String -> Value -> Parser a
gpjg = genericParseJSON . jcGtvmhs
-- | Shortcut for genericToJSON (gtvm-hs)
gtjg :: (Generic a, GToJSON' Value Zero (Rep a)) => String -> a -> Value
gtjg = genericToJSON . jcGtvmhs
-- | Shortcut for genericToEncoding (gtvm-hs)
gteg :: (Generic a, GToJSON' Encoding Zero (Rep a)) => String -> a -> Encoding
gteg = genericToEncoding . jcGtvmhs