Struct bpaf::parsers::ParseArgument
source · pub struct ParseArgument<T> { /* private fields */ }
Expand description
Parser for a named argument, created with argument
.
Implementations§
source§impl<T> ParseArgument<T>
impl<T> ParseArgument<T>
sourcepub fn help<M>(self, help: M) -> Selfwhere
M: Into<Doc>,
pub fn help<M>(self, help: M) -> Selfwhere M: Into<Doc>,
Add a help message to an argument
See NamedArg::help
source§impl<T> ParseArgument<T>
impl<T> ParseArgument<T>
sourcepub fn adjacent(self) -> Self
pub fn adjacent(self) -> Self
Restrict parsed arguments to have both flag and a value in the same word:
In other words adjacent restricted ParseArgument
would accept --flag=value
or
-fbar
but not --flag value
. Note, this is different from adjacent
,
just plays a similar role.
Should allow to parse some of the more unusual things
Combinatoric example
#[derive(Debug, Clone)]
pub struct Options {
package: String,
}
fn package() -> impl Parser<String> {
long("package")
.short('p')
.help("Package to use")
.argument("SPEC")
.adjacent()
}
pub fn options() -> OptionParser<Options> {
construct!(Options { package() }).to_options()
}
fn main() {
println!("{:?}", options().run())
}
Derive example
#[derive(Debug, Clone, Bpaf)]
#[bpaf(options)]
pub struct Options {
#[bpaf(short, long, argument("SPEC"), adjacent)]
/// Package to use
package: String,
}
fn main() {
println!("{:?}", options().run())
}
Output
$ app --help
Usage: app -p=SPEC
Available options:
- -p, --package=SPEC
- Package to use
- -h, --help
- Prints help information
As with regular argument
its adjacent
variant is required by default
$ app
Error: expected --package=SPEC, pass --help for usage information
Error: expected --package=SPEC, pass --help for usage information
But unlike regular variant adjacent
requires name and value to be separated by =
only
$ app -p=htb
Options { package: "htb" }
Options { package: "htb" }
$ app --package=bpaf
Options { package: "bpaf" }
Options { package: "bpaf" }
Separating them by space results in parse failure
$ app --package htb
Error: expected --package=SPEC, got --package. Pass --help for usage information
Error: expected --package=SPEC, got --package. Pass --help for usage information
$ app -p htb
Error: expected --package=SPEC, got -p. Pass --help for usage information
Error: expected --package=SPEC, got -p. Pass --help for usage information
$ app --package
Error: expected --package=SPEC, got --package. Pass --help for usage information
Error: expected --package=SPEC, got --package. Pass --help for usage information
Trait Implementations§
source§impl<T: Clone> Clone for ParseArgument<T>
impl<T: Clone> Clone for ParseArgument<T>
source§fn clone(&self) -> ParseArgument<T>
fn clone(&self) -> ParseArgument<T>
Returns a copy of the value. Read more
1.0.0 · source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
Performs copy-assignment from
source
. Read moresource§impl<T> Parser<T> for ParseArgument<T>where
T: FromStr + 'static,
<T as FromStr>::Err: Display,
impl<T> Parser<T> for ParseArgument<T>where T: FromStr + 'static, <T as FromStr>::Err: Display,
source§fn collect<C>(self) -> ParseCollect<Self, C, T>where
C: FromIterator<T>,
Self: Sized,
fn collect<C>(self) -> ParseCollect<Self, C, T>where C: FromIterator<T>, Self: Sized,
Transform parser into a collection parser Read more
source§fn optional(self) -> ParseOptional<Self>where
Self: Sized + Parser<T>,
fn optional(self) -> ParseOptional<Self>where Self: Sized + Parser<T>,
Turn a required argument into an optional one Read more
source§fn count(self) -> ParseCount<Self, T>where
Self: Sized + Parser<T>,
fn count(self) -> ParseCount<Self, T>where Self: Sized + Parser<T>,
Count how many times the inner parser succeeds, and return that number. Read more
source§fn last(self) -> ParseLast<Self>where
Self: Sized + Parser<T>,
fn last(self) -> ParseLast<Self>where Self: Sized + Parser<T>,
Apply the inner parser as many times as it succeeds, return the last value Read more
source§fn parse<F, R, E>(self, f: F) -> ParseWith<T, Self, F, E, R>where
Self: Sized + Parser<T>,
F: Fn(T) -> Result<R, E>,
E: ToString,
fn parse<F, R, E>(self, f: F) -> ParseWith<T, Self, F, E, R>where Self: Sized + Parser<T>, F: Fn(T) -> Result<R, E>, E: ToString,
Apply a failing transformation to a contained value Read more
source§fn map<F, R>(self, map: F) -> ParseMap<T, Self, F, R>where
Self: Sized + Parser<T>,
F: Fn(T) -> R + 'static,
fn map<F, R>(self, map: F) -> ParseMap<T, Self, F, R>where Self: Sized + Parser<T>, F: Fn(T) -> R + 'static,
Apply a pure transformation to a contained value Read more
source§fn guard<F>(self, check: F, message: &'static str) -> ParseGuard<Self, F>where
Self: Sized + Parser<T>,
F: Fn(&T) -> bool,
fn guard<F>(self, check: F, message: &'static str) -> ParseGuard<Self, F>where Self: Sized + Parser<T>, F: Fn(&T) -> bool,
Validate or fail with a message Read more
source§fn fallback(self, value: T) -> ParseFallback<Self, T>where
Self: Sized + Parser<T>,
fn fallback(self, value: T) -> ParseFallback<Self, T>where Self: Sized + Parser<T>,
Use this value as default if the value isn’t present on a command line Read more
source§fn fallback_with<F, E>(self, fallback: F) -> ParseFallbackWith<T, Self, F, E>where
Self: Sized + Parser<T>,
F: Fn() -> Result<T, E>,
E: ToString,
fn fallback_with<F, E>(self, fallback: F) -> ParseFallbackWith<T, Self, F, E>where Self: Sized + Parser<T>, F: Fn() -> Result<T, E>, E: ToString,
Use value produced by this function as default if the value isn’t present Read more
source§fn hide(self) -> ParseHide<Self>where
Self: Sized + Parser<T>,
fn hide(self) -> ParseHide<Self>where Self: Sized + Parser<T>,
Ignore this parser during any sort of help generation Read more
source§fn hide_usage(self) -> ParseUsage<Self>where
Self: Sized + Parser<T>,
fn hide_usage(self) -> ParseUsage<Self>where Self: Sized + Parser<T>,
Ignore this parser when generating a usage line Read more
source§fn custom_usage<M>(self, usage: M) -> ParseUsage<Self>where
M: Into<Doc>,
Self: Sized + Parser<T>,
fn custom_usage<M>(self, usage: M) -> ParseUsage<Self>where M: Into<Doc>, Self: Sized + Parser<T>,
Customize how this parser looks like in the usage line
source§fn group_help<M: Into<Doc>>(self, message: M) -> ParseGroupHelp<Self>where
Self: Sized + Parser<T>,
fn group_help<M: Into<Doc>>(self, message: M) -> ParseGroupHelp<Self>where Self: Sized + Parser<T>,
Attach a help message to a complex parser Read more
source§fn with_group_help<F>(self, f: F) -> ParseWithGroupHelp<Self, F>where
Self: Sized + Parser<T>,
F: Fn(MetaInfo<'_>) -> Doc,
fn with_group_help<F>(self, f: F) -> ParseWithGroupHelp<Self, F>where Self: Sized + Parser<T>, F: Fn(MetaInfo<'_>) -> Doc,
source§fn complete<M, F>(self, op: F) -> ParseComp<Self, F>where
M: Into<String>,
F: Fn(&T) -> Vec<(M, Option<M>)>,
Self: Sized + Parser<T>,
fn complete<M, F>(self, op: F) -> ParseComp<Self, F>where M: Into<String>, F: Fn(&T) -> Vec<(M, Option<M>)>, Self: Sized + Parser<T>,
Dynamic shell completion Read more
source§fn complete_shell(self, op: ShellComp) -> ParseCompShell<Self>where
Self: Sized + Parser<T>,
fn complete_shell(self, op: ShellComp) -> ParseCompShell<Self>where Self: Sized + Parser<T>,
Static shell completion Read more
source§fn to_options(self) -> OptionParser<T>where
Self: Sized + Parser<T> + 'static,
fn to_options(self) -> OptionParser<T>where Self: Sized + Parser<T> + 'static,
Auto Trait Implementations§
impl<T> RefUnwindSafe for ParseArgument<T>where T: RefUnwindSafe,
impl<T> Send for ParseArgument<T>where T: Send,
impl<T> Sync for ParseArgument<T>where T: Sync,
impl<T> Unpin for ParseArgument<T>where T: Unpin,
impl<T> UnwindSafe for ParseArgument<T>where T: UnwindSafe,
Blanket Implementations§
source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere T: ?Sized,
source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more