module Tedious.Util ( upperFirst, lowerFirst, trimPrefixName, trimPrefixName_, toJSONOptions, schemaOptions ) where import Control.Lens (Ixed (..), (%~)) import Data.Char (toLower, toUpper) import Data.Aeson (Options, defaultOptions) import qualified Data.Aeson as A import Data.OpenApi (fromAesonOptions, SchemaOptions) upperFirst :: String -> String upperFirst :: String -> String upperFirst = Index String -> Traversal' String (IxValue String) forall m. Ixed m => Index m -> Traversal' m (IxValue m) ix Int Index String 0 ((Char -> Identity Char) -> String -> Identity String) -> (Char -> Char) -> String -> String forall s t a b. ASetter s t a b -> (a -> b) -> s -> t %~ Char -> Char toUpper lowerFirst :: String -> String lowerFirst :: String -> String lowerFirst = Index String -> Traversal' String (IxValue String) forall m. Ixed m => Index m -> Traversal' m (IxValue m) ix Int Index String 0 ((Char -> Identity Char) -> String -> Identity String) -> (Char -> Char) -> String -> String forall s t a b. ASetter s t a b -> (a -> b) -> s -> t %~ Char -> Char toLower trimPrefixName :: String -> String -> String trimPrefixName :: String -> String -> String trimPrefixName String name = String -> String lowerFirst (String -> String) -> (String -> String) -> String -> String forall b c a. (b -> c) -> (a -> b) -> a -> c . Int -> String -> String forall a. Int -> [a] -> [a] drop (String -> Int forall a. [a] -> Int forall (t :: * -> *) a. Foldable t => t a -> Int length String name) trimPrefixName_ :: String -> String -> String trimPrefixName_ :: String -> String -> String trimPrefixName_ String name = String -> String lowerFirst (String -> String) -> (String -> String) -> String -> String forall b c a. (b -> c) -> (a -> b) -> a -> c . Int -> String -> String forall a. Int -> [a] -> [a] drop Int 1 (String -> String) -> (String -> String) -> String -> String forall b c a. (b -> c) -> (a -> b) -> a -> c . Int -> String -> String forall a. Int -> [a] -> [a] drop (String -> Int forall a. [a] -> Int forall (t :: * -> *) a. Foldable t => t a -> Int length String name) toJSONOptions :: Options toJSONOptions :: Options toJSONOptions = Options defaultOptions {A.allNullaryToStringTag = False, A.sumEncoding = A.UntaggedValue, A.constructorTagModifier = map toLower, A.fieldLabelModifier = drop 1, A.omitNothingFields = True} schemaOptions :: SchemaOptions schemaOptions :: SchemaOptions schemaOptions = Options -> SchemaOptions fromAesonOptions Options toJSONOptions