{- This Source Code Form is subject to the terms of the Mozilla Public License, v. 2.0. If a copy of the MPL was not distributed with this file, You can obtain one at https://mozilla.org/MPL/2.0/. -} 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 }