module Network.AWS.XRayClient.JSONHelpers
( xrayAesonOptions
) where
import Prelude
import Data.Aeson
import qualified Data.Char as C
import Data.List (isPrefixOf)
xrayAesonOptions :: String -> Options
xrayAesonOptions :: String -> Options
xrayAesonOptions String
prefix = Options
defaultOptions
{ fieldLabelModifier :: String -> String
fieldLabelModifier = String -> String
snakeCaseify (String -> String) -> (String -> String) -> String -> String
forall b c a. (b -> c) -> (a -> b) -> a -> c
. String -> String
unCapitalize (String -> String) -> (String -> String) -> String -> String
forall b c a. (b -> c) -> (a -> b) -> a -> c
. String -> String -> String
dropPrefix String
prefix
, omitNothingFields :: Bool
omitNothingFields = Bool
True
}
snakeCaseify :: String -> String
snakeCaseify :: String -> String
snakeCaseify [] = []
snakeCaseify (Char
c : String
cs)
| Char -> Bool
C.isLower Char
c Bool -> Bool -> Bool
|| Char -> Bool
C.isNumber Char
c = Char
c Char -> String -> String
forall a. a -> [a] -> [a]
: String -> String
snakeCaseify String
cs
| Bool
otherwise = Char
'_' Char -> String -> String
forall a. a -> [a] -> [a]
: Char -> Char
C.toLower Char
c Char -> String -> String
forall a. a -> [a] -> [a]
: String -> String
snakeCaseify String
cs
unCapitalize :: String -> String
unCapitalize :: String -> String
unCapitalize [] = []
unCapitalize (Char
c : String
cs) = Char -> Char
C.toLower Char
c Char -> String -> String
forall a. a -> [a] -> [a]
: String
cs
dropPrefix :: String -> String -> String
dropPrefix :: String -> String -> String
dropPrefix String
prefix String
x = if String
prefix String -> String -> Bool
forall a. Eq a => [a] -> [a] -> Bool
`isPrefixOf` String
x
then Int -> String -> String
forall a. Int -> [a] -> [a]
drop (String -> Int
forall (t :: * -> *) a. Foldable t => t a -> Int
length String
prefix) String
x
else String -> String
forall a. HasCallStack => String -> a
error (String -> String) -> String -> String
forall a b. (a -> b) -> a -> b
$ String
"dropPrefix: " String -> String -> String
forall a. [a] -> [a] -> [a]
++ String -> String
forall a. Show a => a -> String
show String
prefix String -> String -> String
forall a. [a] -> [a] -> [a]
++ String
" is not a prefix of " String -> String -> String
forall a. [a] -> [a] -> [a]
++ String -> String
forall a. Show a => a -> String
show String
x