{-# LANGUAGE OverloadedStrings #-} module OpenAPI.Generate.OptParse.Types ( FixedValueStrategy (..), ModuleName, ModulePathInfo, mkModuleName, getModuleName, mkModulePathInfo, getModuleInfoPath, getModuleInfoDir, ) where import Autodocodec import qualified Data.Maybe as Maybe import qualified Data.Text as T import System.FilePath ((</>)) newtype ModuleName = ModuleName String deriving (Int -> ModuleName -> ShowS [ModuleName] -> ShowS ModuleName -> String (Int -> ModuleName -> ShowS) -> (ModuleName -> String) -> ([ModuleName] -> ShowS) -> Show ModuleName forall a. (Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a $cshowsPrec :: Int -> ModuleName -> ShowS showsPrec :: Int -> ModuleName -> ShowS $cshow :: ModuleName -> String show :: ModuleName -> String $cshowList :: [ModuleName] -> ShowS showList :: [ModuleName] -> ShowS Show, ModuleName -> ModuleName -> Bool (ModuleName -> ModuleName -> Bool) -> (ModuleName -> ModuleName -> Bool) -> Eq ModuleName forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a $c== :: ModuleName -> ModuleName -> Bool == :: ModuleName -> ModuleName -> Bool $c/= :: ModuleName -> ModuleName -> Bool /= :: ModuleName -> ModuleName -> Bool Eq) newtype ModulePathInfo = ModulePathInfo (Maybe FilePath, FilePath) mkModuleName :: String -> ModuleName mkModuleName :: String -> ModuleName mkModuleName = String -> ModuleName ModuleName getModuleName :: ModuleName -> String getModuleName :: ModuleName -> String getModuleName (ModuleName String moduleNameStr) = String moduleNameStr mkModulePathInfo :: ModuleName -> ModulePathInfo mkModulePathInfo :: ModuleName -> ModulePathInfo mkModulePathInfo (ModuleName String moduleNameStr) = let (Maybe String dirMay, Maybe String fileNoExtensionMay) = ((Maybe String, Maybe String) -> Text -> (Maybe String, Maybe String)) -> (Maybe String, Maybe String) -> [Text] -> (Maybe String, Maybe String) forall b a. (b -> a -> b) -> b -> [a] -> b forall (t :: * -> *) b a. Foldable t => (b -> a -> b) -> b -> t a -> b foldl ( \(Maybe String, Maybe String) acc Text next -> let dMay :: Maybe String dMay = case (Maybe String, Maybe String) acc of (Maybe String Nothing, Just String prev) -> String -> Maybe String forall a. a -> Maybe a Just String prev (Just String dir, Just String prev) -> String -> Maybe String forall a. a -> Maybe a Just (String -> Maybe String) -> String -> Maybe String forall a b. (a -> b) -> a -> b $ String dir String -> ShowS </> String prev (Maybe String dMay', Maybe String Nothing) -> Maybe String dMay' in (Maybe String dMay, String -> Maybe String forall a. a -> Maybe a Just (String -> Maybe String) -> String -> Maybe String forall a b. (a -> b) -> a -> b $ Text -> String T.unpack Text next) ) (Maybe String forall a. Maybe a Nothing, Maybe String forall a. Maybe a Nothing) ([Text] -> (Maybe String, Maybe String)) -> (String -> [Text]) -> String -> (Maybe String, Maybe String) forall b c a. (b -> c) -> (a -> b) -> a -> c . HasCallStack => Text -> Text -> [Text] Text -> Text -> [Text] T.splitOn Text "." (Text -> [Text]) -> (String -> Text) -> String -> [Text] forall b c a. (b -> c) -> (a -> b) -> a -> c . String -> Text T.pack (String -> (Maybe String, Maybe String)) -> String -> (Maybe String, Maybe String) forall a b. (a -> b) -> a -> b $ String moduleNameStr in (Maybe String, String) -> ModulePathInfo ModulePathInfo (Maybe String dirMay, String -> Maybe String -> String forall a. a -> Maybe a -> a Maybe.fromMaybe String moduleNameStr Maybe String fileNoExtensionMay) getModuleInfoPath :: ModulePathInfo -> Maybe String -> String -> FilePath getModuleInfoPath :: ModulePathInfo -> Maybe String -> ShowS getModuleInfoPath (ModulePathInfo (Maybe String dirMay, String fileNoExtension)) Maybe String suffixMay String extension = let file :: String file = case Maybe String suffixMay of Maybe String Nothing -> String fileNoExtension String -> ShowS forall a. Semigroup a => a -> a -> a <> String extension Just String suffix -> String fileNoExtension String -> ShowS </> String suffix String -> ShowS forall a. Semigroup a => a -> a -> a <> String extension in String -> ShowS -> Maybe String -> String forall b a. b -> (a -> b) -> Maybe a -> b maybe String file (String -> ShowS </> String file) Maybe String dirMay getModuleInfoDir :: ModulePathInfo -> FilePath getModuleInfoDir :: ModulePathInfo -> String getModuleInfoDir (ModulePathInfo (Maybe String dirMay, String fileNoExtension)) = String -> ShowS -> Maybe String -> String forall b a. b -> (a -> b) -> Maybe a -> b maybe String fileNoExtension (String -> ShowS </> String fileNoExtension) Maybe String dirMay data FixedValueStrategy = FixedValueStrategyExclude | FixedValueStrategyInclude deriving (FixedValueStrategy -> FixedValueStrategy -> Bool (FixedValueStrategy -> FixedValueStrategy -> Bool) -> (FixedValueStrategy -> FixedValueStrategy -> Bool) -> Eq FixedValueStrategy forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a $c== :: FixedValueStrategy -> FixedValueStrategy -> Bool == :: FixedValueStrategy -> FixedValueStrategy -> Bool $c/= :: FixedValueStrategy -> FixedValueStrategy -> Bool /= :: FixedValueStrategy -> FixedValueStrategy -> Bool Eq, FixedValueStrategy FixedValueStrategy -> FixedValueStrategy -> Bounded FixedValueStrategy forall a. a -> a -> Bounded a $cminBound :: FixedValueStrategy minBound :: FixedValueStrategy $cmaxBound :: FixedValueStrategy maxBound :: FixedValueStrategy Bounded, Int -> FixedValueStrategy FixedValueStrategy -> Int FixedValueStrategy -> [FixedValueStrategy] FixedValueStrategy -> FixedValueStrategy FixedValueStrategy -> FixedValueStrategy -> [FixedValueStrategy] FixedValueStrategy -> FixedValueStrategy -> FixedValueStrategy -> [FixedValueStrategy] (FixedValueStrategy -> FixedValueStrategy) -> (FixedValueStrategy -> FixedValueStrategy) -> (Int -> FixedValueStrategy) -> (FixedValueStrategy -> Int) -> (FixedValueStrategy -> [FixedValueStrategy]) -> (FixedValueStrategy -> FixedValueStrategy -> [FixedValueStrategy]) -> (FixedValueStrategy -> FixedValueStrategy -> [FixedValueStrategy]) -> (FixedValueStrategy -> FixedValueStrategy -> FixedValueStrategy -> [FixedValueStrategy]) -> Enum FixedValueStrategy forall a. (a -> a) -> (a -> a) -> (Int -> a) -> (a -> Int) -> (a -> [a]) -> (a -> a -> [a]) -> (a -> a -> [a]) -> (a -> a -> a -> [a]) -> Enum a $csucc :: FixedValueStrategy -> FixedValueStrategy succ :: FixedValueStrategy -> FixedValueStrategy $cpred :: FixedValueStrategy -> FixedValueStrategy pred :: FixedValueStrategy -> FixedValueStrategy $ctoEnum :: Int -> FixedValueStrategy toEnum :: Int -> FixedValueStrategy $cfromEnum :: FixedValueStrategy -> Int fromEnum :: FixedValueStrategy -> Int $cenumFrom :: FixedValueStrategy -> [FixedValueStrategy] enumFrom :: FixedValueStrategy -> [FixedValueStrategy] $cenumFromThen :: FixedValueStrategy -> FixedValueStrategy -> [FixedValueStrategy] enumFromThen :: FixedValueStrategy -> FixedValueStrategy -> [FixedValueStrategy] $cenumFromTo :: FixedValueStrategy -> FixedValueStrategy -> [FixedValueStrategy] enumFromTo :: FixedValueStrategy -> FixedValueStrategy -> [FixedValueStrategy] $cenumFromThenTo :: FixedValueStrategy -> FixedValueStrategy -> FixedValueStrategy -> [FixedValueStrategy] enumFromThenTo :: FixedValueStrategy -> FixedValueStrategy -> FixedValueStrategy -> [FixedValueStrategy] Enum) instance Show FixedValueStrategy where show :: FixedValueStrategy -> String show FixedValueStrategy FixedValueStrategyExclude = String "exclude" show FixedValueStrategy FixedValueStrategyInclude = String "include" instance Read FixedValueStrategy where readsPrec :: Int -> ReadS FixedValueStrategy readsPrec Int _ (Char 'e' : Char 'x' : Char 'c' : Char 'l' : Char 'u' : Char 'd' : Char 'e' : String rest) = [(FixedValueStrategy FixedValueStrategyExclude, String rest)] readsPrec Int _ (Char 'i' : Char 'n' : Char 'c' : Char 'l' : Char 'u' : Char 'd' : Char 'e' : String rest) = [(FixedValueStrategy FixedValueStrategyInclude, String rest)] readsPrec Int _ String _ = [] instance HasCodec FixedValueStrategy where codec :: JSONCodec FixedValueStrategy codec = JSONCodec FixedValueStrategy forall enum. (Show enum, Eq enum, Enum enum, Bounded enum) => JSONCodec enum shownBoundedEnumCodec