Expand description
A flag/switch/argument that has a long name
You can specify it multiple times, bpaf
would use items past the first one as hidden aliases.
fn parse_bool() -> impl Parser<bool> {
short('f')
.long("flag")
.long("Flag")
.help("a flag that does a thing")
.switch()
}
See Named
for more details
Examples found in repository?
More examples
examples/negative.rs (line 6)
5 6 7 8 9 10 11 12 13 14 15 16 17
fn main() {
let age = long("age").argument("AGE").from_str::<i64>();
let msg = "\
To pass a value that starts with a dash requres one one of two special syntaxes:
This will pass '-1' to '--age' handler and leave remaining arguments as is
--age=-1
This will transform everything after '--' into non flags, '--age' will handle '-1'
and positional handlers will be able to handle the rest.
--age -- -1";
let num = age.to_options().descr(msg).run();
println!("age: {}", num);
}
examples/derive_show_asm.rs (line 52)
≺ ≻
51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105
fn parse_manifest_path() -> impl Parser<PathBuf> {
long("manifest-path")
.help("Path to Cargo.toml")
.argument_os("PATH")
.map(PathBuf::from)
.parse(|p| {
if p.is_absolute() {
Ok(p)
} else {
std::env::current_dir()
.map(|d| d.join(p))
.and_then(|full_path| full_path.canonicalize())
}
})
.fallback_with(|| std::env::current_dir().map(|x| x.join("Cargo.toml")))
}
#[derive(Debug, Clone, Bpaf)]
pub struct Format {
/// Print interleaved Rust code
pub rust: bool,
#[bpaf(external(color_detection))]
pub color: bool,
/// include full demangled name instead of just prefix
pub full_name: bool,
}
#[derive(Debug, Clone, Bpaf)]
pub enum Syntax {
/// Generate assembly using Intel style
Intel,
/// Generate assembly using AT&T style
Att,
}
impl ToString for Syntax {
fn to_string(&self) -> String {
match self {
Syntax::Intel => String::from("llvm-args=-x86-asm-syntax=intel"),
Syntax::Att => String::from("llvm-args=-x86-asm-syntax=att"),
}
}
}
fn color_detection() -> impl Parser<bool> {
let yes = long("color")
.help("Enable color highlighting")
.req_flag(true);
let no = long("no-color")
.help("Disable color highlighting")
.req_flag(false);
construct!([yes, no]).fallback_with::<_, &str>(|| Ok(true))
}
examples/multiple_fallback.rs (line 26)
≺ ≻
25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47
pub fn main() {
let field1 = long("field1")
.env("FIELD1")
.help("Field 1")
.argument("ARG")
.from_str::<u32>()
.fallback(DEFAULT_CONFIG.field1);
let field2 = long("field2")
.env("FIELD2")
.help("Field 2")
.argument("ARG")
.from_str::<u64>()
.fallback(DEFAULT_CONFIG.field2);
let opts = construct!(Config { field1, field2 }).to_options().run();
// At this point if you get opts - it should be taken from one of
// - the command line argument
// - the environmental variable
// - the config file
// - the hard-coded default (from config parser)
println!("{:?}", opts);
}
Additional examples can be found in: