Using Commandant
public protocol CommandType {
typealias ClientError
/// The action that users should specify to use this subcommand (e.g.,
/// `help`).
var verb: String { get }
/// A human-readable, high-level description of what this command is used
/// for.
var function: String { get }
/// Runs this subcommand in the given mode.
func run(mode: CommandMode) -> Result<(), CommandantError<ClientError>>
}