cargo-ver 0.2.3

A cargo extension to manage crate versions.
Documentation
use clap::{
	crate_version,
	App,
	AppSettings,
	Arg,
};

pub fn new() -> App<'static> {
	App::new("cargo-ver")
		.about("Manage cargo crate versions.")
		.version(crate_version!())
		.global_setting(AppSettings::DisableVersionForSubcommands)
		.global_setting(AppSettings::UnifiedHelpMessage)
		.subcommand(cmd_bump())
		.subcommand(cmd_set())
		.arg(
			Arg::new("toml")
				.about("Manually set the Cargo.toml path.")
				.short('t')
				.long("toml")
				.takes_value(true),
		)
}

fn cmd_set() -> App<'static> {
	App::new("set")
		.about("Set the crate version.")
		.visible_alias("s")
		.arg(
			Arg::new("version")
				.about("A semver compatible version.")
				.required(true)
				.forbid_empty_values(true),
		)
}

fn cmd_bump() -> App<'static> {
	let app = App::new("bump")
		.about("Bump a part of the current version.")
		.visible_alias("b");

	let field = Arg::new("field")
		.about("The part to bump.")
		.long_about(
			"The part to bump.
  One of the following:
    - major [aliases: maj]
    - minor [aliases: min]
    - patch [aliases: p, pat]",
		)
		.required(true)
		.possible_values(&["patch", "minor", "major", "pat", "p", "min", "maj"])
		.forbid_empty_values(true)
		.case_insensitive(true)
		.hide_possible_values(true)
		.value_name("version field");

	app.arg(field)
}