25 lines
632 B
Haskell
Raw Normal View History

2025-01-24 22:38:58 +01:00
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
}