packages feed

liblawless-0.13.0: Source/Aeson.hs

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