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 = defaultOptions { omitNothingFields = True } stripFieldNamePrefix :: String -> String -> String stripFieldNamePrefix pre = lowerFirst . try (L.stripPrefix pre) dropSuffixAndSnakeCase :: String -> String -> String dropSuffixAndSnakeCase suffix = T.unpack . CS.process CS.lower CS.snake . T.pack . dropSuffix suffix lowerFirst :: String -> String lowerFirst (x : xs) = C.toLower x : xs lowerFirst [] = [] lowerAll :: String -> String lowerAll = fmap C.toLower dropSuffix :: String -> String -> String dropSuffix suffix = reverse . try (L.stripPrefix . reverse $ suffix) . reverse try :: (a -> Maybe a) -> a -> a try f v = fromMaybe v (f v)