Something went wrong. Try again.
Define datatypes once, get polyglot results
Something went wrong. Try again.
2.5 kB · 76 lines
Haskell
at main
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677module DataTypeTool.Cli where
import qualified Antelude.List as Listimport Antelude.String ( fromString )
import Data.Version ( showVersion )
import Options.Applicative ( (<**>) )import qualified Options.Applicative as Opts
import Paths_datatypetool ( version )
import qualified System.Directory as Dir
data Flags = Flags { tomlPath :: FilePath , verbosity :: Verbosity } deriving (Eq, Ord, Show)
data Verbosity = Basic | Extra | Debug | Silly deriving (Eq, Ord, Show)
opts :: FilePath -> Opts.ParserInfo Flagsopts cwd = let parseFlags :: Opts.Parser Flags parseFlags = Flags <$> ( ( Opts.strOption ( Opts.long "toml" <> Opts.short 't' <> Opts.metavar "FILE" <> Opts.help "A datatypetool.toml file path, if not within the current working directory" ) |> Opts.liftA (\a -> fromString a :: FilePath) ) <|> pure (cwd <> fromString "/datatypetool.toml" :: FilePath) ) <*> ( ( List.length <$> Opts.many ( Opts.flag' Basic ( Opts.short 'v' <> Opts.help "Increase verbosity, up to three times" ) ) ) |> Opts.liftA ( \case 0 -> Basic 1 -> Extra 2 -> Debug _ -> Silly ) ) in Opts.info (parseFlags <**> Opts.simpleVersioner (showVersion version) <**> Opts.helper) ( Opts.fullDesc <> Opts.progDesc "Create types that work across your entire stack.\n\ \ This CLI reads a datatypetool.toml file and creates types for\ \ all specified languages from a set of *.type files." )
yeses :: List Stringyeses = [ "y" , "yes" ]
nos :: List Stringnos = [ "n" , "no" ]