packages feed

helic-0.5.0.0: lib/Helic/Json.hs

-- |Aeson TH deriving, Internal
module Helic.Json where

import qualified Data.Aeson as Aeson
import Data.Aeson.TH (deriveJSON)
import qualified Language.Haskell.TH as TH

-- |Derive Aeson codecs for single-field types with custom settings.
unaryJson :: TH.Name -> TH.Q [TH.Dec]
unaryJson =
  deriveJSON Aeson.defaultOptions {
    Aeson.fieldLabelModifier = dropWhile ('_' ==)
  }

-- |Derive Aeson codecs with custom settings.
json :: TH.Name -> TH.Q [TH.Dec]
json =
  deriveJSON Aeson.defaultOptions {
    Aeson.fieldLabelModifier = dropWhile ('_' ==),
    Aeson.unwrapUnaryRecords = True
  }