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
|
||
|
}
|