|
@@ -4,11 +4,12 @@
|
|
|
|
|
|
//! Types and functions related to CLI arguments.
|
|
|
|
|
|
-use crate::utils::config::{CliArg, CliConfig};
|
|
|
-
|
|
|
-use clap::{
|
|
|
- crate_authors, crate_description, crate_name, crate_version, App, Arg, ArgMatches, ErrorKind,
|
|
|
+use crate::{
|
|
|
+ utils::config::{CliArg, CliConfig},
|
|
|
+ PackageInfo,
|
|
|
};
|
|
|
+
|
|
|
+use clap::{App, Arg, ArgMatches, ErrorKind};
|
|
|
use serde::Serialize;
|
|
|
use serde_json::Value;
|
|
|
use std::collections::HashMap;
|
|
@@ -63,12 +64,12 @@ impl Matches {
|
|
|
}
|
|
|
|
|
|
/// Gets the argument matches of the CLI definition.
|
|
|
-pub fn get_matches(cli: &CliConfig) -> crate::api::Result<Matches> {
|
|
|
+pub fn get_matches(cli: &CliConfig, package_info: &PackageInfo) -> crate::api::Result<Matches> {
|
|
|
let about = cli
|
|
|
.description()
|
|
|
- .unwrap_or(&crate_description!().to_string())
|
|
|
+ .unwrap_or(&package_info.description.to_string())
|
|
|
.to_string();
|
|
|
- let app = get_app(crate_name!(), Some(&about), cli);
|
|
|
+ let app = get_app(package_info, &package_info.name, Some(&about), cli);
|
|
|
match app.try_get_matches() {
|
|
|
Ok(matches) => Ok(get_matches_internal(cli, &matches)),
|
|
|
Err(e) => match e.kind {
|
|
@@ -142,10 +143,15 @@ fn map_matches(config: &CliConfig, matches: &ArgMatches, cli_matches: &mut Match
|
|
|
}
|
|
|
}
|
|
|
|
|
|
-fn get_app<'a>(name: &str, about: Option<&'a String>, config: &'a CliConfig) -> App<'a> {
|
|
|
- let mut app = App::new(name)
|
|
|
- .author(crate_authors!())
|
|
|
- .version(crate_version!());
|
|
|
+fn get_app<'a>(
|
|
|
+ package_info: &'a PackageInfo,
|
|
|
+ command_name: &'a str,
|
|
|
+ about: Option<&'a String>,
|
|
|
+ config: &'a CliConfig,
|
|
|
+) -> App<'a> {
|
|
|
+ let mut app = App::new(command_name)
|
|
|
+ .author(package_info.authors)
|
|
|
+ .version(&*package_info.version);
|
|
|
|
|
|
if let Some(about) = about {
|
|
|
app = app.about(&**about);
|
|
@@ -169,7 +175,12 @@ fn get_app<'a>(name: &str, about: Option<&'a String>, config: &'a CliConfig) ->
|
|
|
|
|
|
if let Some(subcommands) = config.subcommands() {
|
|
|
for (subcommand_name, subcommand) in subcommands {
|
|
|
- let clap_subcommand = get_app(subcommand_name, subcommand.description(), subcommand);
|
|
|
+ let clap_subcommand = get_app(
|
|
|
+ package_info,
|
|
|
+ subcommand_name,
|
|
|
+ subcommand.description(),
|
|
|
+ subcommand,
|
|
|
+ );
|
|
|
app = app.subcommand(clap_subcommand);
|
|
|
}
|
|
|
}
|
|
@@ -187,8 +198,8 @@ fn get_arg<'a>(arg_name: &'a str, arg: &'a CliArg) -> Arg<'a> {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- clap_arg = bind_string_arg!(arg, clap_arg, description, about);
|
|
|
- clap_arg = bind_string_arg!(arg, clap_arg, long_description, long_about);
|
|
|
+ clap_arg = bind_string_arg!(arg, clap_arg, description, help);
|
|
|
+ clap_arg = bind_string_arg!(arg, clap_arg, long_description, long_help);
|
|
|
clap_arg = bind_value_arg!(arg, clap_arg, takes_value);
|
|
|
if let Some(value) = arg.multiple {
|
|
|
clap_arg = clap_arg.multiple_values(value);
|