module Data.Connect.AesonHelpers ( baseOptions , stripFieldNamePrefix , dropSuffixAndSnakeCase , lowerAll ) where import qualified Cases as CS import Data.Aeson.Types import qualified Data.Char as C import qualified Data.List as L import Data.Maybe (fromMaybe) import qualified Data.Text as T baseOptions :: Options baseOptions :: Options baseOptions = Options defaultOptions { omitNothingFields :: Bool omitNothingFields = Bool True } stripFieldNamePrefix :: String -> String -> String stripFieldNamePrefix :: String -> String -> String stripFieldNamePrefix String pre = String -> String lowerFirst forall b c a. (b -> c) -> (a -> b) -> a -> c . forall a. (a -> Maybe a) -> a -> a try (forall a. Eq a => [a] -> [a] -> Maybe [a] L.stripPrefix String pre) dropSuffixAndSnakeCase :: String -> String -> String dropSuffixAndSnakeCase :: String -> String -> String dropSuffixAndSnakeCase String suffix = Text -> String T.unpack forall b c a. (b -> c) -> (a -> b) -> a -> c . CaseTransformer -> Delimiter -> Text -> Text CS.process CaseTransformer CS.lower Delimiter CS.snake forall b c a. (b -> c) -> (a -> b) -> a -> c . String -> Text T.pack forall b c a. (b -> c) -> (a -> b) -> a -> c . String -> String -> String dropSuffix String suffix lowerFirst :: String -> String lowerFirst :: String -> String lowerFirst (Char x : String xs) = Char -> Char C.toLower Char x forall a. a -> [a] -> [a] : String xs lowerFirst [] = [] lowerAll :: String -> String lowerAll :: String -> String lowerAll = forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b fmap Char -> Char C.toLower dropSuffix :: String -> String -> String dropSuffix :: String -> String -> String dropSuffix String suffix = forall a. [a] -> [a] reverse forall b c a. (b -> c) -> (a -> b) -> a -> c . forall a. (a -> Maybe a) -> a -> a try (forall a. Eq a => [a] -> [a] -> Maybe [a] L.stripPrefix forall b c a. (b -> c) -> (a -> b) -> a -> c . forall a. [a] -> [a] reverse forall a b. (a -> b) -> a -> b $ String suffix) forall b c a. (b -> c) -> (a -> b) -> a -> c . forall a. [a] -> [a] reverse try :: (a -> Maybe a) -> a -> a try :: forall a. (a -> Maybe a) -> a -> a try a -> Maybe a f a v = forall a. a -> Maybe a -> a fromMaybe a v (a -> Maybe a f a v)