optparse-applicative:使用来自选项定义的自定义错误消息生成使用信息
optparse-applicative: Generate usage information with custom error message from options definition
我正在使用存储命令行参数的构造函数 SrvOpts
填充 Opts
类型:
main :: IO ()
main = join $ customExecParser cf $ info options
(fullDesc <> header "header" <> footer "footer")
where cf = defaultPrefs { prefShowHelpOnError=True }
options :: Parser (IO ())
options = subparser $
command "serve" (info (handleServe <$> (SrvOpts
<$> strOption [...]
函数 handleServe
获取数据,然后进行进一步验证。
如何使用自定义错误消息和从 handleServe
内部的 options
生成的正常 optparse-applicative 样式的使用信息来终止程序?
可以使用 Options.Applicative.Extra
中的 parserFailure
函数来完成:
renderError :: Context -> String -> IO ()
renderError c msg = handleParseResult . Failure $
parserFailure argPrefs argInfo (ErrorMsg msg) [c]
在当前版本 0.12.0.1 Context
中必须从 Options.Applicative.Internal
导入,这将会改变。 Context
构造函数采用子解析器的名称和用于呈现使用信息的 ParserInfo
(info (handleServe <$> ...
部分)。
我正在使用存储命令行参数的构造函数 SrvOpts
填充 Opts
类型:
main :: IO ()
main = join $ customExecParser cf $ info options
(fullDesc <> header "header" <> footer "footer")
where cf = defaultPrefs { prefShowHelpOnError=True }
options :: Parser (IO ())
options = subparser $
command "serve" (info (handleServe <$> (SrvOpts
<$> strOption [...]
函数 handleServe
获取数据,然后进行进一步验证。
如何使用自定义错误消息和从 handleServe
内部的 options
生成的正常 optparse-applicative 样式的使用信息来终止程序?
可以使用 Options.Applicative.Extra
中的 parserFailure
函数来完成:
renderError :: Context -> String -> IO ()
renderError c msg = handleParseResult . Failure $
parserFailure argPrefs argInfo (ErrorMsg msg) [c]
在当前版本 0.12.0.1 Context
中必须从 Options.Applicative.Internal
导入,这将会改变。 Context
构造函数采用子解析器的名称和用于呈现使用信息的 ParserInfo
(info (handleServe <$> ...
部分)。