25 lines
632 B
Haskell

module TeaCleaner.Options
( jsonOptions
) where
import qualified Data.Aeson.TH as Aeson
import Prelude hiding (id)
import Data.Char
applyFirst :: (Char -> Char) -> String -> String
applyFirst _ [] = []
applyFirst f [x] = [f x]
applyFirst f (x:xs) = f x: xs
-- | Generic casing for symbol separated names
symbCase :: String -> String
symbCase = u . applyFirst toLower
where u [] = []
u (x:xs) | isUpper x = '_' : toLower x : u xs
| otherwise = x : u xs
jsonOptions :: Aeson.Options
jsonOptions = Aeson.defaultOptions
{ Aeson.fieldLabelModifier = symbCase
}