{-# LANGUAGE LambdaCase #-}
module BattlePlace.Util
( jsonOptions
, jsonOptionsWithTag
) where
import qualified Data.Aeson as J
jsonOptions :: J.Options
jsonOptions = jsonOptionsWithTag "status"
jsonOptionsWithTag :: String -> J.Options
jsonOptionsWithTag tag = J.defaultOptions
{ J.fieldLabelModifier = dropBeforeUnderscore
, J.constructorTagModifier = dropBeforeUnderscore
, J.sumEncoding = J.TaggedObject
{ J.tagFieldName = tag
, J.contentsFieldName = "contents"
}
}
dropBeforeUnderscore :: String -> String
dropBeforeUnderscore = \case
x : xs -> case x of
'_' -> xs
_ -> dropBeforeUnderscore xs
[] -> []