{-| Module: BattlePlace.Util Description: General utilities. License: MIT -} {-# 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 [] -> []