aboutsummaryrefslogtreecommitdiff
path: root/vendor/clap/examples/find.rs
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/clap/examples/find.rs')
-rw-r--r--vendor/clap/examples/find.rs99
1 files changed, 0 insertions, 99 deletions
diff --git a/vendor/clap/examples/find.rs b/vendor/clap/examples/find.rs
deleted file mode 100644
index 0b7f2c7..0000000
--- a/vendor/clap/examples/find.rs
+++ /dev/null
@@ -1,99 +0,0 @@
-use std::collections::BTreeMap;
-
-use clap::{arg, command, ArgGroup, ArgMatches, Command};
-
-fn main() {
- let matches = cli().get_matches();
- let values = Value::from_matches(&matches);
- println!("{values:#?}");
-}
-
-fn cli() -> Command {
- command!()
- .group(ArgGroup::new("tests").multiple(true))
- .next_help_heading("TESTS")
- .args([
- arg!(--empty "File is empty and is either a regular file or a directory").group("tests"),
- arg!(--name <NAME> "Base of file name (the path with the leading directories removed) matches shell pattern pattern").group("tests"),
- ])
- .group(ArgGroup::new("operators").multiple(true))
- .next_help_heading("OPERATORS")
- .args([
- arg!(-o - -or "expr2 is not evaluate if exp1 is true").group("operators"),
- arg!(-a - -and "Same as `expr1 expr1`").group("operators"),
- ])
-}
-
-#[derive(Clone, PartialEq, Eq, Hash, Debug)]
-pub enum Value {
- Bool(bool),
- String(String),
-}
-
-impl Value {
- pub fn from_matches(matches: &ArgMatches) -> Vec<(clap::Id, Self)> {
- let mut values = BTreeMap::new();
- for id in matches.ids() {
- if matches.try_get_many::<clap::Id>(id.as_str()).is_ok() {
- // ignore groups
- continue;
- }
- let value_source = matches
- .value_source(id.as_str())
- .expect("id came from matches");
- if value_source != clap::parser::ValueSource::CommandLine {
- // Any other source just gets tacked on at the end (like default values)
- continue;
- }
- if Self::extract::<String>(matches, id, &mut values) {
- continue;
- }
- if Self::extract::<bool>(matches, id, &mut values) {
- continue;
- }
- unimplemented!("unknown type for {id}: {matches:?}");
- }
- values.into_values().collect::<Vec<_>>()
- }
-
- fn extract<T: Clone + Into<Value> + Send + Sync + 'static>(
- matches: &ArgMatches,
- id: &clap::Id,
- output: &mut BTreeMap<usize, (clap::Id, Self)>,
- ) -> bool {
- match matches.try_get_many::<T>(id.as_str()) {
- Ok(Some(values)) => {
- for (value, index) in values.zip(
- matches
- .indices_of(id.as_str())
- .expect("id came from matches"),
- ) {
- output.insert(index, (id.clone(), value.clone().into()));
- }
- true
- }
- Ok(None) => {
- unreachable!("`ids` only reports what is present")
- }
- Err(clap::parser::MatchesError::UnknownArgument { .. }) => {
- unreachable!("id came from matches")
- }
- Err(clap::parser::MatchesError::Downcast { .. }) => false,
- Err(_) => {
- unreachable!("id came from matches")
- }
- }
- }
-}
-
-impl From<String> for Value {
- fn from(other: String) -> Self {
- Self::String(other)
- }
-}
-
-impl From<bool> for Value {
- fn from(other: bool) -> Self {
- Self::Bool(other)
- }
-}