module Aeson ( module Data.Aeson, module Data.Aeson.Types, module Data.JsonSchema.Draft4, moludeJSONOptions, moludeToJSONEncoding, moludeParseJSON ) where import Molude import Data.Char import Data.Aeson import Data.Aeson.Types import GHC.Generics (Generic, Rep) import Data.JsonSchema.Draft4 dropLensPrefix ∷ [Char] → [Char] dropLensPrefix = let p c = c ≡ '_' ∨ isLower c in toListOf (droppingWhile p folded) moludeJSONOptions ∷ Options moludeJSONOptions = defaultOptions { fieldLabelModifier = camelTo2 '_' ∘ dropLensPrefix, constructorTagModifier = camelTo2 '_' ∘ dropLensPrefix, allNullaryToStringTag = False, omitNothingFields = False, unwrapUnaryRecords = True, sumEncoding = ObjectWithSingleField} moludeToJSONEncoding ∷ ∀ a. (GToEncoding (Rep a), Generic a) ⇒ a → Encoding moludeToJSONEncoding = genericToEncoding moludeJSONOptions moludeParseJSON ∷ ∀ a. (GFromJSON (Rep a), Generic a) ⇒ Value → Parser a moludeParseJSON = genericParseJSON moludeJSONOptions