git.iko.soy/typeable/xsd-isogen
on master help sign in
84 lines 2.2 kB history raw
1{-# LANGUAGE OverloadedStrings #-}
2{-# LANGUAGE TypeApplications #-}
4module Options
5 ( Options(..)
6 , optionsParser
7 , getOptions
8 , GenType(..)
9 , genTypeToText
10 , ModuleName
11 , Header
12 ) where
14import Data.Text (Text)
15import qualified Data.Text as T
16import Data.Version (showVersion)
17import Options.Applicative
18import Paths_xsd_isogen (version)
19import Data.List
22data GenType = Parser | Generator | ParserAndGenerator
23 deriving (Read, Show, Eq, Bounded, Enum)
25genTypeToText :: GenType -> Text
26genTypeToText Parser = "Parser"
27genTypeToText Generator = "Generator"
28genTypeToText ParserAndGenerator = "ParserAndGenerator"
30type ModuleName = Text
31type Header = Text
33data Options = Options
34 { oHeader :: Maybe Header
35 , oMode :: GenType
36 , oInput :: FilePath
37 , oModule :: ModuleName
38 }
39 deriving (Show)
41optionsParser :: Parser Options
42optionsParser = Options
43 <$> ( flag' Nothing
44 ( long "no-header"
45 <> help "Do not place a header at the top of the file."
46 ) <|> Just <$> strOption
47 ( long "header"
48 <> help "A custom header to be placed at the top of the file."
49 <> value ("This file was generated by xsd-isogen version "
50 <> T.pack (showVersion version)
51 <> "\nhttps://github.com/dredozubov/xsd-isogen")
52 )
53 )
54 <*> option auto
55 ( long "mode"
56 <> short 'm'
57 <> value ParserAndGenerator
58 <> help ("Whether to generate both parsers and generators. One of: "
59 <> (mconcat . intersperse ", " . fmap show
60 $ [minBound @GenType .. maxBound]) <> ".")
61 )
62 <*> strOption
63 ( long "input"
64 <> short 'i'
65 <> help "Path to the input .xsd file."
66 )
67 <*> strOption
68 ( long "name"
69 <> short 'n'
70 <> help "Specify the name of the generated module."
71 <> value "Dummy"
72 )
75getOptions :: IO Options
76getOptions = execParser $ info (optionsParser <**> helper)
77 $ fullDesc
78 <> header
79 ( "xsd-isogen version " <> showVersion version
80 <> " (https://github.com/dredozubov/xsd-isogen)"
81 )
82 <> progDesc ( "A tool for generating xml-isogen-compatible "
83 <> "(https://github.com/typeable/xml-isogen) .hs files from .xsd files."
84 )