gotyno-hs-1.0.0: app/Main.hs
module Main where
import qualified Library
import Options.Applicative
import Prelude
-- This `main` function just delegates to the library's definition of `main`
main :: IO ()
main = do
let parserOptions =
info
(parseOptions <**> helper)
( fullDesc <> progDesc programDescription
<> header ("gotyno - " <> programDescription)
)
programDescription = "Compile type definitions into encoders/decoders for languages"
options <- execParser parserOptions
Library.runMain options
parseOptions :: Parser Library.Options
parseOptions =
Library.Options
<$> parseLanguages
<*> switch (long "watch" <> short 'w' <> help "Watch files and recompile automatically")
<*> switch (long "verbose" <> short 'v' <> help "Output info about compilation")
<*> some (argument str (metavar "GOTYNOFILE"))
parseLanguages :: Parser Library.Languages
parseLanguages =
Library.Languages
<$> option
(maybeReader parseOutputDestination)
( long "typescript"
<> long "ts"
<> help "Set TypeScript output"
<> value Nothing
<> metavar "=|-|PATH"
)
<*> option
(maybeReader parseOutputDestination)
( long "fsharp"
<> long "fs"
<> help "Set FSharp output"
<> value Nothing
<> metavar "=|-|PATH"
)
<*> option
(maybeReader parseOutputDestination)
( long "python"
<> long "py"
<> help "Set Python output"
<> value Nothing
<> metavar "=|-|PATH"
)
parseOutputDestination :: String -> Maybe (Maybe Library.OutputDestination)
parseOutputDestination "=" = pure $ Just Library.SameAsInput
parseOutputDestination "-" = pure $ Just Library.StandardOut
parseOutputDestination other = pure $ Just $ Library.OutputPath other