module Data.Aeson.Casing.Internal where
import Data.Aeson.Types
import Data.Char
aesonDrop :: Int -> (String -> String) -> Options
aesonDrop :: Int -> (String -> String) -> Options
aesonDrop Int
n String -> String
f = Options
defaultOptions
{ fieldLabelModifier = f . drop n }
aesonPrefix :: (String -> String) -> Options
aesonPrefix :: (String -> String) -> Options
aesonPrefix String -> String
f = Options
defaultOptions
{ fieldLabelModifier = f . dropFPrefix }
snakeCase :: String -> String
snakeCase :: String -> String
snakeCase = Char -> String -> String
symbCase Char
'_'
trainCase :: String -> String
trainCase :: String -> String
trainCase = Char -> String -> String
symbCase Char
'-'
camelCase :: String -> String
camelCase :: String -> String
camelCase = (Char -> Char) -> String -> String
applyFirst Char -> Char
toLower
pascalCase :: String -> String
pascalCase :: String -> String
pascalCase = (Char -> Char) -> String -> String
applyFirst Char -> Char
toUpper
symbCase :: Char -> (String -> String)
symbCase :: Char -> String -> String
symbCase Char
sym = String -> String
u (String -> String) -> (String -> String) -> String -> String
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (Char -> Char) -> String -> String
applyFirst Char -> Char
toLower
where u :: String -> String
u [] = []
u (Char
x:String
xs) | Char -> Bool
isUpper Char
x = Char
sym Char -> String -> String
forall a. a -> [a] -> [a]
: Char -> Char
toLower Char
x Char -> String -> String
forall a. a -> [a] -> [a]
: String -> String
u String
xs
| Bool
otherwise = Char
x Char -> String -> String
forall a. a -> [a] -> [a]
: String -> String
u String
xs
applyFirst :: (Char -> Char) -> String -> String
applyFirst :: (Char -> Char) -> String -> String
applyFirst Char -> Char
_ [] = []
applyFirst Char -> Char
f [Char
x] = [Char -> Char
f Char
x]
applyFirst Char -> Char
f (Char
x:String
xs) = Char -> Char
f Char
xChar -> String -> String
forall a. a -> [a] -> [a]
: String
xs
dropFPrefix :: String -> String
dropFPrefix :: String -> String
dropFPrefix [] = []
dropFPrefix (Char
x:String
xs) | Char -> Bool
isUpper Char
x = Char
x Char -> String -> String
forall a. a -> [a] -> [a]
: String
xs
| Bool
otherwise = String -> String
dropFPrefix String
xs
dropCPrefix :: String -> String
dropCPrefix :: String -> String
dropCPrefix [] = []
dropCPrefix [Char
x] = [Char
x]
dropCPrefix (Char
x0:Char
x1:String
xs) | Char -> Bool
isLower Char
x1 = Char
x0 Char -> String -> String
forall a. a -> [a] -> [a]
: Char
x1 Char -> String -> String
forall a. a -> [a] -> [a]
: String
xs
| Bool
otherwise = String -> String
dropCPrefix (Char
x1 Char -> String -> String
forall a. a -> [a] -> [a]
: String
xs)