25 lines
632 B
Haskell
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
|
|
}
|