Merge pull request #156 from Carthage/module-stability 🛠 Enable Swift Module Stability
Merge pull request #156 from Carthage/module-stability
🛠 Enable Swift Module Stability
Commandant is a Swift framework for parsing command-line arguments, inspired by Argo (which is, in turn, inspired by the Haskell library Aeson).
With Commandant, a command and its associated options could be defined as follows:
struct LogCommand: CommandProtocol { typealias Options = LogOptions let verb = "log" let function = "Reads the log" func run(_ options: Options) -> Result<(), YourErrorType> { // Use the parsed options to do something interesting here. return () } } struct LogOptions: OptionsProtocol { let lines: Int let verbose: Bool let logName: String static func create(_ lines: Int) -> (Bool) -> (String) -> LogOptions { return { verbose in { logName in LogOptions(lines: lines, verbose: verbose, logName: logName) } } } static func evaluate(_ m: CommandMode) -> Result<LogOptions, CommandantError<YourErrorType>> { return create <*> m <| Option(key: "lines", defaultValue: 0, usage: "the number of lines to read from the logs") <*> m <| Option(key: "verbose", defaultValue: false, usage: "show verbose output") <*> m <| Argument(usage: "the log to read") } }
Then, each available command should be added to a registry:
let commands = CommandRegistry<YourErrorType>() commands.register(LogCommand()) commands.register(VersionCommand())
After which, arguments can be parsed by simply invoking the registry:
var arguments = CommandLine.arguments // Remove the executable name. assert(!arguments.isEmpty) arguments.remove(at: 0) if let verb = arguments.first { // Remove the command name. arguments.remove(at: 0) if let result = commands.run(command: verb, arguments: arguments) { // Handle success or failure. } else { // Unrecognized command. } } else { // No command given. }
For real-world examples, see the implementation of the Carthage command-line tool.
Commandant is released under the MIT license.
©Copyright 2023 CCF 开源发展委员会 Powered by Trustie& IntelliDE 京ICP备13000930号
Commandant
Commandant is a Swift framework for parsing command-line arguments, inspired by Argo (which is, in turn, inspired by the Haskell library Aeson).
Example
With Commandant, a command and its associated options could be defined as follows:
Then, each available command should be added to a registry:
After which, arguments can be parsed by simply invoking the registry:
For real-world examples, see the implementation of the Carthage command-line tool.
License
Commandant is released under the MIT license.