Parser

Struct Parser 

Source
pub struct Parser<C> { /* private fields */ }
Expand description

The core parser.

Implementations§

Source§

impl<C> Parser<C>

Source

pub fn from_env(ctx: C) -> Self

Create a parser for parsing the process’ command line arguments.

Examples found in repository?
examples/conflict.rs (line 35)
17fn main() -> Result<(), Box<dyn std::error::Error>> {
18  let help_spec = arg::Builder::new()
19    .sopt('h')
20    .lopt("help")
21    .exit(true)
22    .help(&["Show this help."])
23    .build(help_proc);
24  let coll_spec = arg::Builder::new()
25    .sopt('h')
26    .lopt("hulp")
27    .exit(true)
28    .help(&["Show this help."])
29    .build(help_proc);
30
31
32  let ctx = MyContext {
33    ..Default::default()
34  };
35  let mut prsr = arg::Parser::from_env(ctx);
36
37  prsr.add(help_spec)?;
38  prsr.add(coll_spec)?;
39
40  prsr.parse()?;
41
42  //let ctx = prsr.into_ctx();
43  if prsr.get_ctx().do_help == true {
44    prsr.usage(&mut std::io::stdout());
45    std::process::exit(0);
46  }
47
48  println!("{:?}", prsr.get_ctx());
49
50  Ok(())
51}
More examples
Hide additional examples
examples/remaining.rs (line 58)
37fn main() -> Result<(), Box<dyn std::error::Error>> {
38  let help_spec = arg::Builder::new()
39    .sopt('h')
40    .lopt("help")
41    .exit(true)
42    .help(&["Show this help."])
43    .build(help_proc);
44  let exec_spec = arg::Builder::new()
45    .name("exec")
46    .nargs(arg::Nargs::Count(1), &["PRG"])
47    .help(&["The executable to run."])
48    .build(exec_proc);
49  let eargs_spec = arg::Builder::new()
50    .name("execargs")
51    .nargs(arg::Nargs::Remainder, &["PRGARG"])
52    .help(&["arguments to pass to the executable."])
53    .build(eargs_proc);
54
55  let ctx = MyContext {
56    ..Default::default()
57  };
58  let mut prsr = arg::Parser::from_env(ctx);
59
60  prsr.add(help_spec)?;
61  prsr.add(exec_spec)?;
62  prsr.add(eargs_spec)?;
63
64  prsr.parse()?;
65
66  if prsr.get_ctx().do_help == true {
67    prsr.usage(&mut std::io::stdout());
68    std::process::exit(0);
69  }
70
71  let ctx = prsr.into_ctx();
72
73  println!("{:?}", &ctx);
74
75  Ok(())
76}
examples/hidden.rs (line 47)
11fn main() -> Result<(), Box<dyn std::error::Error>> {
12  let help_spec = arg::Builder::new()
13    .sopt('h')
14    .lopt("help")
15    .exit(true)
16    .help(&["Show this help."])
17    .build(
18      |_spec: &arg::Spec<MyContext>,
19       ctx: &mut MyContext,
20       _args: &Vec<String>| ctx.do_help = true
21    );
22  let version_spec = arg::Builder::new()
23    .sopt('V')
24    .lopt("version")
25    .exit(true)
26    .help(&["Output tool version and exit."])
27    .build(
28      |_spec: &arg::Spec<MyContext>,
29       ctx: &mut MyContext,
30       _args: &Vec<String>| ctx.do_version = true
31    );
32  let secret_spec = arg::Builder::new()
33    .sopt('s')
34    .lopt("secret")
35    .hidden(true)
36    .help(&["A hidden option."])
37    .build(
38      |_spec: &arg::Spec<MyContext>,
39       ctx: &mut MyContext,
40       _args: &Vec<String>| ctx.do_secret = true
41    );
42
43
44  let ctx = MyContext {
45    ..Default::default()
46  };
47  let mut prsr = arg::Parser::from_env(ctx);
48
49  prsr.add(help_spec)?;
50  prsr.add(version_spec)?;
51  prsr.add(secret_spec)?;
52
53  prsr.parse()?;
54
55  if prsr.get_ctx().do_help == true {
56    prsr.usage(&mut std::io::stdout());
57    std::process::exit(0);
58  }
59
60  let ctx = prsr.into_ctx();
61
62  println!("{:?}", &ctx);
63
64  Ok(())
65}
examples/usage.rs (line 56)
19fn main() -> Result<(), Box<dyn std::error::Error>> {
20  let help_spec = arg::Builder::new()
21    .sopt('h')
22    .lopt("help")
23    .exit(true)
24    .help(&["Show this help."])
25    .build(|_spec, ctx: &mut MyContext, _args| {
26      ctx.do_help = true;
27    });
28  let version_spec = arg::Builder::new()
29    .sopt('V')
30    .lopt("version")
31    .exit(true)
32    .help(&["Output tool version and exit."])
33    .build(
34      |_spec: &arg::Spec<MyContext>,
35       ctx: &mut MyContext,
36       _args: &Vec<String>| ctx.do_version = true
37    );
38  let tophelp_spec = arg::Builder::new()
39    .sopt('t')
40    .lopt("tophelp")
41    .help(&["Show top help."])
42    .build(|_spec, ctx: &mut MyContext, _args| {
43      ctx.tophelp = true;
44    });
45  let bottomhelp_spec = arg::Builder::new()
46    .sopt('b')
47    .lopt("bottomhelp")
48    .help(&["Show bottom help."])
49    .build(|_spec, ctx: &mut MyContext, _args| {
50      ctx.bottomhelp = true;
51    });
52
53  let ctx = MyContext {
54    ..Default::default()
55  };
56  let mut prsr = arg::Parser::from_env(ctx);
57
58  prsr.add(help_spec)?;
59  prsr.add(version_spec)?;
60  prsr.add(tophelp_spec)?;
61  prsr.add(bottomhelp_spec)?;
62
63  prsr.parse()?;
64
65  if prsr.get_ctx().do_help == true {
66    prsr.usage(&mut std::io::stdout());
67    std::process::exit(0);
68  }
69
70  if prsr.get_ctx().do_version == true {
71    const VERSION: &'static str = env!("CARGO_PKG_VERSION");
72    println!("usage {}", VERSION);
73    std::process::exit(0);
74  }
75
76  let ctx = prsr.into_ctx();
77
78  println!("{:?}", &ctx);
79
80  usage_test(ctx)?;
81
82  Ok(())
83}
examples/simple.rs (line 122)
72fn main() -> Result<(), Box<dyn std::error::Error>> {
73  let help_spec = arg::Builder::new()
74    .sopt('h')
75    .lopt("help")
76    .exit(true)
77    .help(&["Show this help."])
78    .build(help_proc);
79  let verbose_spec = arg::Builder::new()
80    .sopt('v')
81    .lopt("verbose")
82    .help(&["Increase level of verbosity.", "Be quiet by default."])
83    .build(verbose_proc);
84  let version_spec = arg::Builder::new()
85    .sopt('V')
86    .lopt("version")
87    .exit(true)
88    .help(&["Output tool version and exit."])
89    .build(
90      |_spec: &arg::Spec<MyContext>,
91       ctx: &mut MyContext,
92       _args: &Vec<String>| ctx.do_version = true
93    );
94  let file_spec = arg::Builder::new()
95    .sopt('f')
96    .lopt("file")
97    .help(&["Use data in FILE."])
98    .nargs(arg::Nargs::Count(1), &["FILE"])
99    .build(file_proc);
100  let param_spec = arg::Builder::new()
101    .sopt('p')
102    .lopt("param")
103    .help(&["Add a key/value parameter field. The key must be unique."])
104    .nargs(arg::Nargs::Count(2), &["KEY", "VALUE"])
105    .build(param_proc);
106  let cmd_spec = arg::Builder::new()
107    .name("command")
108    .required(true)
109    .nargs(arg::Nargs::Count(1), &["COMMAND"])
110    .help(&["The command to run."])
111    .build(cmd_proc);
112  let subcmd_spec = arg::Builder::new()
113    .name("subcmd")
114    .nargs(arg::Nargs::Count(1), &["SUBCMD"])
115    .help(&["Command-specific sub-command."])
116    .build(subcmd_proc);
117
118
119  let ctx = MyContext {
120    ..Default::default()
121  };
122  let mut prsr = arg::Parser::from_env(ctx);
123
124  prsr.add(help_spec)?;
125  prsr.add(verbose_spec)?;
126  prsr.add(version_spec)?;
127  prsr.add(file_spec)?;
128  prsr.add(param_spec)?;
129  prsr.add(cmd_spec)?;
130  prsr.add(subcmd_spec)?;
131
132  prsr.parse()?;
133
134  if prsr.get_ctx().do_help == true {
135    prsr.usage(&mut std::io::stdout());
136    std::process::exit(0);
137  }
138
139  let ctx = prsr.into_ctx();
140
141  println!("{:?}", &ctx);
142
143  Ok(())
144}
Source

pub fn from_args<I, S>(argv0: &str, args: I, ctx: C) -> Self
where I: IntoIterator<Item = S>, S: AsRef<str>,

Examples found in repository?
examples/usage.rs (line 140)
86fn usage_test(ctx: MyContext) -> Result<(), Box<dyn std::error::Error>> {
87  let help_spec = arg::Builder::new()
88    .sopt('h')
89    .lopt("help")
90    .exit(true)
91    .help(&["Show this help."])
92    .build(|_spec, ctx: &mut MyContext, _args| {
93      ctx.do_help = true;
94    });
95  let version_spec = arg::Builder::new()
96    .sopt('V')
97    .lopt("version")
98    .exit(true)
99    .help(&["Output tool version and exit."])
100    .build(
101      |_spec: &arg::Spec<MyContext>,
102       ctx: &mut MyContext,
103       _args: &Vec<String>| ctx.do_version = true
104    );
105  let file_spec = arg::Builder::new()
106    .sopt('f')
107    .lopt("file")
108    .help(&["Use data in FILE."])
109    .nargs(arg::Nargs::Count(1), &["FILE"])
110    .build(|_spec, ctx: &mut MyContext, args| {
111      ctx.fname = args[0].clone();
112    });
113  let param_spec = arg::Builder::new()
114    .sopt('p')
115    .lopt("param")
116    .help(&["Add a key/value parameter field. The key must be unique."])
117    .nargs(arg::Nargs::Count(2), &["KEY", "VALUE"])
118    .build(|_spec, ctx: &mut MyContext, args| {
119      ctx.params.insert(args[0].clone(), args[1].clone());
120    });
121  let cmd_spec = arg::Builder::new()
122    .name("command")
123    .required(true)
124    .nargs(arg::Nargs::Count(1), &["COMMAND"])
125    .help(&["The command to run."])
126    .build(|_spec, ctx: &mut MyContext, args| {
127      ctx.cmd = args[0].clone();
128    });
129  let subcmd_spec = arg::Builder::new()
130    .name("subcmd")
131    .nargs(arg::Nargs::Count(1), &["SUBCMD"])
132    .help(&["Command-specific sub-command."])
133    .build(|_spec, ctx: &mut MyContext, args| {
134      ctx.subcmd = args[0].clone();
135    });
136
137  let ctx2 = MyContext {
138    ..Default::default()
139  };
140  let mut prsr = arg::Parser::from_args("hello", &["--help"], ctx2);
141
142  if ctx.tophelp {
143    prsr.set_tophelp(&[
144      "\"You know,\" said Arthur, \"it's at times like this, when I'm \
145       trapped in a Vogon airlock with a man from Betelgeuse, and about to \
146       die of asphyxiation in deep space that I really wish I'd listened to \
147       what my mother told me when I was young.\"",
148      "\"Why, what did she tell you?\"",
149      "\"I don't know, I didn't listen.\""
150    ]);
151  }
152  if ctx.bottomhelp {
153    prsr.set_bottomhelp(&[
154      "\"So this is it,\" said Arthur, \"We are going to die.\"",
155      "\"Yes,\" said Ford, \"except... no! Wait a minute!\" He suddenly \
156       lunged across the chamber at something behind Arthur's line of \
157       vision. \"What's this switch?\" he cried.",
158      "\"What? Where?\" cried Arthur, twisting round.",
159      "\"No, I was only fooling,\" said Ford, \"we are going to die after \
160       all.\""
161    ]);
162  }
163
164  prsr.add(help_spec)?;
165  prsr.add(version_spec)?;
166  prsr.add(file_spec)?;
167  prsr.add(param_spec)?;
168  prsr.add(cmd_spec)?;
169  prsr.add(subcmd_spec)?;
170
171  prsr.parse()?;
172
173  if prsr.get_ctx().do_help == true {
174    prsr.usage(&mut std::io::stdout());
175    std::process::exit(0);
176  }
177
178  let ctx = prsr.into_ctx();
179
180  println!("{:?}", &ctx);
181
182  Ok(())
183}
Source

pub fn add(&mut self, spec: Spec<C>) -> Result<(), ErrKind<C>>

Examples found in repository?
examples/conflict.rs (line 37)
17fn main() -> Result<(), Box<dyn std::error::Error>> {
18  let help_spec = arg::Builder::new()
19    .sopt('h')
20    .lopt("help")
21    .exit(true)
22    .help(&["Show this help."])
23    .build(help_proc);
24  let coll_spec = arg::Builder::new()
25    .sopt('h')
26    .lopt("hulp")
27    .exit(true)
28    .help(&["Show this help."])
29    .build(help_proc);
30
31
32  let ctx = MyContext {
33    ..Default::default()
34  };
35  let mut prsr = arg::Parser::from_env(ctx);
36
37  prsr.add(help_spec)?;
38  prsr.add(coll_spec)?;
39
40  prsr.parse()?;
41
42  //let ctx = prsr.into_ctx();
43  if prsr.get_ctx().do_help == true {
44    prsr.usage(&mut std::io::stdout());
45    std::process::exit(0);
46  }
47
48  println!("{:?}", prsr.get_ctx());
49
50  Ok(())
51}
More examples
Hide additional examples
examples/remaining.rs (line 60)
37fn main() -> Result<(), Box<dyn std::error::Error>> {
38  let help_spec = arg::Builder::new()
39    .sopt('h')
40    .lopt("help")
41    .exit(true)
42    .help(&["Show this help."])
43    .build(help_proc);
44  let exec_spec = arg::Builder::new()
45    .name("exec")
46    .nargs(arg::Nargs::Count(1), &["PRG"])
47    .help(&["The executable to run."])
48    .build(exec_proc);
49  let eargs_spec = arg::Builder::new()
50    .name("execargs")
51    .nargs(arg::Nargs::Remainder, &["PRGARG"])
52    .help(&["arguments to pass to the executable."])
53    .build(eargs_proc);
54
55  let ctx = MyContext {
56    ..Default::default()
57  };
58  let mut prsr = arg::Parser::from_env(ctx);
59
60  prsr.add(help_spec)?;
61  prsr.add(exec_spec)?;
62  prsr.add(eargs_spec)?;
63
64  prsr.parse()?;
65
66  if prsr.get_ctx().do_help == true {
67    prsr.usage(&mut std::io::stdout());
68    std::process::exit(0);
69  }
70
71  let ctx = prsr.into_ctx();
72
73  println!("{:?}", &ctx);
74
75  Ok(())
76}
examples/hidden.rs (line 49)
11fn main() -> Result<(), Box<dyn std::error::Error>> {
12  let help_spec = arg::Builder::new()
13    .sopt('h')
14    .lopt("help")
15    .exit(true)
16    .help(&["Show this help."])
17    .build(
18      |_spec: &arg::Spec<MyContext>,
19       ctx: &mut MyContext,
20       _args: &Vec<String>| ctx.do_help = true
21    );
22  let version_spec = arg::Builder::new()
23    .sopt('V')
24    .lopt("version")
25    .exit(true)
26    .help(&["Output tool version and exit."])
27    .build(
28      |_spec: &arg::Spec<MyContext>,
29       ctx: &mut MyContext,
30       _args: &Vec<String>| ctx.do_version = true
31    );
32  let secret_spec = arg::Builder::new()
33    .sopt('s')
34    .lopt("secret")
35    .hidden(true)
36    .help(&["A hidden option."])
37    .build(
38      |_spec: &arg::Spec<MyContext>,
39       ctx: &mut MyContext,
40       _args: &Vec<String>| ctx.do_secret = true
41    );
42
43
44  let ctx = MyContext {
45    ..Default::default()
46  };
47  let mut prsr = arg::Parser::from_env(ctx);
48
49  prsr.add(help_spec)?;
50  prsr.add(version_spec)?;
51  prsr.add(secret_spec)?;
52
53  prsr.parse()?;
54
55  if prsr.get_ctx().do_help == true {
56    prsr.usage(&mut std::io::stdout());
57    std::process::exit(0);
58  }
59
60  let ctx = prsr.into_ctx();
61
62  println!("{:?}", &ctx);
63
64  Ok(())
65}
examples/usage.rs (line 58)
19fn main() -> Result<(), Box<dyn std::error::Error>> {
20  let help_spec = arg::Builder::new()
21    .sopt('h')
22    .lopt("help")
23    .exit(true)
24    .help(&["Show this help."])
25    .build(|_spec, ctx: &mut MyContext, _args| {
26      ctx.do_help = true;
27    });
28  let version_spec = arg::Builder::new()
29    .sopt('V')
30    .lopt("version")
31    .exit(true)
32    .help(&["Output tool version and exit."])
33    .build(
34      |_spec: &arg::Spec<MyContext>,
35       ctx: &mut MyContext,
36       _args: &Vec<String>| ctx.do_version = true
37    );
38  let tophelp_spec = arg::Builder::new()
39    .sopt('t')
40    .lopt("tophelp")
41    .help(&["Show top help."])
42    .build(|_spec, ctx: &mut MyContext, _args| {
43      ctx.tophelp = true;
44    });
45  let bottomhelp_spec = arg::Builder::new()
46    .sopt('b')
47    .lopt("bottomhelp")
48    .help(&["Show bottom help."])
49    .build(|_spec, ctx: &mut MyContext, _args| {
50      ctx.bottomhelp = true;
51    });
52
53  let ctx = MyContext {
54    ..Default::default()
55  };
56  let mut prsr = arg::Parser::from_env(ctx);
57
58  prsr.add(help_spec)?;
59  prsr.add(version_spec)?;
60  prsr.add(tophelp_spec)?;
61  prsr.add(bottomhelp_spec)?;
62
63  prsr.parse()?;
64
65  if prsr.get_ctx().do_help == true {
66    prsr.usage(&mut std::io::stdout());
67    std::process::exit(0);
68  }
69
70  if prsr.get_ctx().do_version == true {
71    const VERSION: &'static str = env!("CARGO_PKG_VERSION");
72    println!("usage {}", VERSION);
73    std::process::exit(0);
74  }
75
76  let ctx = prsr.into_ctx();
77
78  println!("{:?}", &ctx);
79
80  usage_test(ctx)?;
81
82  Ok(())
83}
84
85
86fn usage_test(ctx: MyContext) -> Result<(), Box<dyn std::error::Error>> {
87  let help_spec = arg::Builder::new()
88    .sopt('h')
89    .lopt("help")
90    .exit(true)
91    .help(&["Show this help."])
92    .build(|_spec, ctx: &mut MyContext, _args| {
93      ctx.do_help = true;
94    });
95  let version_spec = arg::Builder::new()
96    .sopt('V')
97    .lopt("version")
98    .exit(true)
99    .help(&["Output tool version and exit."])
100    .build(
101      |_spec: &arg::Spec<MyContext>,
102       ctx: &mut MyContext,
103       _args: &Vec<String>| ctx.do_version = true
104    );
105  let file_spec = arg::Builder::new()
106    .sopt('f')
107    .lopt("file")
108    .help(&["Use data in FILE."])
109    .nargs(arg::Nargs::Count(1), &["FILE"])
110    .build(|_spec, ctx: &mut MyContext, args| {
111      ctx.fname = args[0].clone();
112    });
113  let param_spec = arg::Builder::new()
114    .sopt('p')
115    .lopt("param")
116    .help(&["Add a key/value parameter field. The key must be unique."])
117    .nargs(arg::Nargs::Count(2), &["KEY", "VALUE"])
118    .build(|_spec, ctx: &mut MyContext, args| {
119      ctx.params.insert(args[0].clone(), args[1].clone());
120    });
121  let cmd_spec = arg::Builder::new()
122    .name("command")
123    .required(true)
124    .nargs(arg::Nargs::Count(1), &["COMMAND"])
125    .help(&["The command to run."])
126    .build(|_spec, ctx: &mut MyContext, args| {
127      ctx.cmd = args[0].clone();
128    });
129  let subcmd_spec = arg::Builder::new()
130    .name("subcmd")
131    .nargs(arg::Nargs::Count(1), &["SUBCMD"])
132    .help(&["Command-specific sub-command."])
133    .build(|_spec, ctx: &mut MyContext, args| {
134      ctx.subcmd = args[0].clone();
135    });
136
137  let ctx2 = MyContext {
138    ..Default::default()
139  };
140  let mut prsr = arg::Parser::from_args("hello", &["--help"], ctx2);
141
142  if ctx.tophelp {
143    prsr.set_tophelp(&[
144      "\"You know,\" said Arthur, \"it's at times like this, when I'm \
145       trapped in a Vogon airlock with a man from Betelgeuse, and about to \
146       die of asphyxiation in deep space that I really wish I'd listened to \
147       what my mother told me when I was young.\"",
148      "\"Why, what did she tell you?\"",
149      "\"I don't know, I didn't listen.\""
150    ]);
151  }
152  if ctx.bottomhelp {
153    prsr.set_bottomhelp(&[
154      "\"So this is it,\" said Arthur, \"We are going to die.\"",
155      "\"Yes,\" said Ford, \"except... no! Wait a minute!\" He suddenly \
156       lunged across the chamber at something behind Arthur's line of \
157       vision. \"What's this switch?\" he cried.",
158      "\"What? Where?\" cried Arthur, twisting round.",
159      "\"No, I was only fooling,\" said Ford, \"we are going to die after \
160       all.\""
161    ]);
162  }
163
164  prsr.add(help_spec)?;
165  prsr.add(version_spec)?;
166  prsr.add(file_spec)?;
167  prsr.add(param_spec)?;
168  prsr.add(cmd_spec)?;
169  prsr.add(subcmd_spec)?;
170
171  prsr.parse()?;
172
173  if prsr.get_ctx().do_help == true {
174    prsr.usage(&mut std::io::stdout());
175    std::process::exit(0);
176  }
177
178  let ctx = prsr.into_ctx();
179
180  println!("{:?}", &ctx);
181
182  Ok(())
183}
examples/simple.rs (line 124)
72fn main() -> Result<(), Box<dyn std::error::Error>> {
73  let help_spec = arg::Builder::new()
74    .sopt('h')
75    .lopt("help")
76    .exit(true)
77    .help(&["Show this help."])
78    .build(help_proc);
79  let verbose_spec = arg::Builder::new()
80    .sopt('v')
81    .lopt("verbose")
82    .help(&["Increase level of verbosity.", "Be quiet by default."])
83    .build(verbose_proc);
84  let version_spec = arg::Builder::new()
85    .sopt('V')
86    .lopt("version")
87    .exit(true)
88    .help(&["Output tool version and exit."])
89    .build(
90      |_spec: &arg::Spec<MyContext>,
91       ctx: &mut MyContext,
92       _args: &Vec<String>| ctx.do_version = true
93    );
94  let file_spec = arg::Builder::new()
95    .sopt('f')
96    .lopt("file")
97    .help(&["Use data in FILE."])
98    .nargs(arg::Nargs::Count(1), &["FILE"])
99    .build(file_proc);
100  let param_spec = arg::Builder::new()
101    .sopt('p')
102    .lopt("param")
103    .help(&["Add a key/value parameter field. The key must be unique."])
104    .nargs(arg::Nargs::Count(2), &["KEY", "VALUE"])
105    .build(param_proc);
106  let cmd_spec = arg::Builder::new()
107    .name("command")
108    .required(true)
109    .nargs(arg::Nargs::Count(1), &["COMMAND"])
110    .help(&["The command to run."])
111    .build(cmd_proc);
112  let subcmd_spec = arg::Builder::new()
113    .name("subcmd")
114    .nargs(arg::Nargs::Count(1), &["SUBCMD"])
115    .help(&["Command-specific sub-command."])
116    .build(subcmd_proc);
117
118
119  let ctx = MyContext {
120    ..Default::default()
121  };
122  let mut prsr = arg::Parser::from_env(ctx);
123
124  prsr.add(help_spec)?;
125  prsr.add(verbose_spec)?;
126  prsr.add(version_spec)?;
127  prsr.add(file_spec)?;
128  prsr.add(param_spec)?;
129  prsr.add(cmd_spec)?;
130  prsr.add(subcmd_spec)?;
131
132  prsr.parse()?;
133
134  if prsr.get_ctx().do_help == true {
135    prsr.usage(&mut std::io::stdout());
136    std::process::exit(0);
137  }
138
139  let ctx = prsr.into_ctx();
140
141  println!("{:?}", &ctx);
142
143  Ok(())
144}
Source

pub fn get_arg0(&self) -> &str

Source

pub fn get_remaining_args(&mut self) -> Vec<String>

Source

pub fn have_capture_rest(&self) -> bool

Source

pub fn set_tophelp<I, S>(&mut self, p: I)
where I: IntoIterator<Item = S>, S: ToString,

Examples found in repository?
examples/usage.rs (lines 143-150)
86fn usage_test(ctx: MyContext) -> Result<(), Box<dyn std::error::Error>> {
87  let help_spec = arg::Builder::new()
88    .sopt('h')
89    .lopt("help")
90    .exit(true)
91    .help(&["Show this help."])
92    .build(|_spec, ctx: &mut MyContext, _args| {
93      ctx.do_help = true;
94    });
95  let version_spec = arg::Builder::new()
96    .sopt('V')
97    .lopt("version")
98    .exit(true)
99    .help(&["Output tool version and exit."])
100    .build(
101      |_spec: &arg::Spec<MyContext>,
102       ctx: &mut MyContext,
103       _args: &Vec<String>| ctx.do_version = true
104    );
105  let file_spec = arg::Builder::new()
106    .sopt('f')
107    .lopt("file")
108    .help(&["Use data in FILE."])
109    .nargs(arg::Nargs::Count(1), &["FILE"])
110    .build(|_spec, ctx: &mut MyContext, args| {
111      ctx.fname = args[0].clone();
112    });
113  let param_spec = arg::Builder::new()
114    .sopt('p')
115    .lopt("param")
116    .help(&["Add a key/value parameter field. The key must be unique."])
117    .nargs(arg::Nargs::Count(2), &["KEY", "VALUE"])
118    .build(|_spec, ctx: &mut MyContext, args| {
119      ctx.params.insert(args[0].clone(), args[1].clone());
120    });
121  let cmd_spec = arg::Builder::new()
122    .name("command")
123    .required(true)
124    .nargs(arg::Nargs::Count(1), &["COMMAND"])
125    .help(&["The command to run."])
126    .build(|_spec, ctx: &mut MyContext, args| {
127      ctx.cmd = args[0].clone();
128    });
129  let subcmd_spec = arg::Builder::new()
130    .name("subcmd")
131    .nargs(arg::Nargs::Count(1), &["SUBCMD"])
132    .help(&["Command-specific sub-command."])
133    .build(|_spec, ctx: &mut MyContext, args| {
134      ctx.subcmd = args[0].clone();
135    });
136
137  let ctx2 = MyContext {
138    ..Default::default()
139  };
140  let mut prsr = arg::Parser::from_args("hello", &["--help"], ctx2);
141
142  if ctx.tophelp {
143    prsr.set_tophelp(&[
144      "\"You know,\" said Arthur, \"it's at times like this, when I'm \
145       trapped in a Vogon airlock with a man from Betelgeuse, and about to \
146       die of asphyxiation in deep space that I really wish I'd listened to \
147       what my mother told me when I was young.\"",
148      "\"Why, what did she tell you?\"",
149      "\"I don't know, I didn't listen.\""
150    ]);
151  }
152  if ctx.bottomhelp {
153    prsr.set_bottomhelp(&[
154      "\"So this is it,\" said Arthur, \"We are going to die.\"",
155      "\"Yes,\" said Ford, \"except... no! Wait a minute!\" He suddenly \
156       lunged across the chamber at something behind Arthur's line of \
157       vision. \"What's this switch?\" he cried.",
158      "\"What? Where?\" cried Arthur, twisting round.",
159      "\"No, I was only fooling,\" said Ford, \"we are going to die after \
160       all.\""
161    ]);
162  }
163
164  prsr.add(help_spec)?;
165  prsr.add(version_spec)?;
166  prsr.add(file_spec)?;
167  prsr.add(param_spec)?;
168  prsr.add(cmd_spec)?;
169  prsr.add(subcmd_spec)?;
170
171  prsr.parse()?;
172
173  if prsr.get_ctx().do_help == true {
174    prsr.usage(&mut std::io::stdout());
175    std::process::exit(0);
176  }
177
178  let ctx = prsr.into_ctx();
179
180  println!("{:?}", &ctx);
181
182  Ok(())
183}
Source

pub fn append_tophelp<I, S>(&mut self, p: I)
where I: IntoIterator<Item = S>, S: ToString,

Source

pub fn set_bottomhelp<I, S>(&mut self, p: I)
where I: IntoIterator<Item = S>, S: ToString,

Examples found in repository?
examples/usage.rs (lines 153-161)
86fn usage_test(ctx: MyContext) -> Result<(), Box<dyn std::error::Error>> {
87  let help_spec = arg::Builder::new()
88    .sopt('h')
89    .lopt("help")
90    .exit(true)
91    .help(&["Show this help."])
92    .build(|_spec, ctx: &mut MyContext, _args| {
93      ctx.do_help = true;
94    });
95  let version_spec = arg::Builder::new()
96    .sopt('V')
97    .lopt("version")
98    .exit(true)
99    .help(&["Output tool version and exit."])
100    .build(
101      |_spec: &arg::Spec<MyContext>,
102       ctx: &mut MyContext,
103       _args: &Vec<String>| ctx.do_version = true
104    );
105  let file_spec = arg::Builder::new()
106    .sopt('f')
107    .lopt("file")
108    .help(&["Use data in FILE."])
109    .nargs(arg::Nargs::Count(1), &["FILE"])
110    .build(|_spec, ctx: &mut MyContext, args| {
111      ctx.fname = args[0].clone();
112    });
113  let param_spec = arg::Builder::new()
114    .sopt('p')
115    .lopt("param")
116    .help(&["Add a key/value parameter field. The key must be unique."])
117    .nargs(arg::Nargs::Count(2), &["KEY", "VALUE"])
118    .build(|_spec, ctx: &mut MyContext, args| {
119      ctx.params.insert(args[0].clone(), args[1].clone());
120    });
121  let cmd_spec = arg::Builder::new()
122    .name("command")
123    .required(true)
124    .nargs(arg::Nargs::Count(1), &["COMMAND"])
125    .help(&["The command to run."])
126    .build(|_spec, ctx: &mut MyContext, args| {
127      ctx.cmd = args[0].clone();
128    });
129  let subcmd_spec = arg::Builder::new()
130    .name("subcmd")
131    .nargs(arg::Nargs::Count(1), &["SUBCMD"])
132    .help(&["Command-specific sub-command."])
133    .build(|_spec, ctx: &mut MyContext, args| {
134      ctx.subcmd = args[0].clone();
135    });
136
137  let ctx2 = MyContext {
138    ..Default::default()
139  };
140  let mut prsr = arg::Parser::from_args("hello", &["--help"], ctx2);
141
142  if ctx.tophelp {
143    prsr.set_tophelp(&[
144      "\"You know,\" said Arthur, \"it's at times like this, when I'm \
145       trapped in a Vogon airlock with a man from Betelgeuse, and about to \
146       die of asphyxiation in deep space that I really wish I'd listened to \
147       what my mother told me when I was young.\"",
148      "\"Why, what did she tell you?\"",
149      "\"I don't know, I didn't listen.\""
150    ]);
151  }
152  if ctx.bottomhelp {
153    prsr.set_bottomhelp(&[
154      "\"So this is it,\" said Arthur, \"We are going to die.\"",
155      "\"Yes,\" said Ford, \"except... no! Wait a minute!\" He suddenly \
156       lunged across the chamber at something behind Arthur's line of \
157       vision. \"What's this switch?\" he cried.",
158      "\"What? Where?\" cried Arthur, twisting round.",
159      "\"No, I was only fooling,\" said Ford, \"we are going to die after \
160       all.\""
161    ]);
162  }
163
164  prsr.add(help_spec)?;
165  prsr.add(version_spec)?;
166  prsr.add(file_spec)?;
167  prsr.add(param_spec)?;
168  prsr.add(cmd_spec)?;
169  prsr.add(subcmd_spec)?;
170
171  prsr.parse()?;
172
173  if prsr.get_ctx().do_help == true {
174    prsr.usage(&mut std::io::stdout());
175    std::process::exit(0);
176  }
177
178  let ctx = prsr.into_ctx();
179
180  println!("{:?}", &ctx);
181
182  Ok(())
183}
Source

pub fn append_bottomhelp<I, S>(&mut self, p: I)
where I: IntoIterator<Item = S>, S: ToString,

Source

pub fn parse(&mut self) -> Result<Option<Rc<RefCell<Spec<C>>>>, ErrKind<C>>

Examples found in repository?
examples/conflict.rs (line 40)
17fn main() -> Result<(), Box<dyn std::error::Error>> {
18  let help_spec = arg::Builder::new()
19    .sopt('h')
20    .lopt("help")
21    .exit(true)
22    .help(&["Show this help."])
23    .build(help_proc);
24  let coll_spec = arg::Builder::new()
25    .sopt('h')
26    .lopt("hulp")
27    .exit(true)
28    .help(&["Show this help."])
29    .build(help_proc);
30
31
32  let ctx = MyContext {
33    ..Default::default()
34  };
35  let mut prsr = arg::Parser::from_env(ctx);
36
37  prsr.add(help_spec)?;
38  prsr.add(coll_spec)?;
39
40  prsr.parse()?;
41
42  //let ctx = prsr.into_ctx();
43  if prsr.get_ctx().do_help == true {
44    prsr.usage(&mut std::io::stdout());
45    std::process::exit(0);
46  }
47
48  println!("{:?}", prsr.get_ctx());
49
50  Ok(())
51}
More examples
Hide additional examples
examples/remaining.rs (line 64)
37fn main() -> Result<(), Box<dyn std::error::Error>> {
38  let help_spec = arg::Builder::new()
39    .sopt('h')
40    .lopt("help")
41    .exit(true)
42    .help(&["Show this help."])
43    .build(help_proc);
44  let exec_spec = arg::Builder::new()
45    .name("exec")
46    .nargs(arg::Nargs::Count(1), &["PRG"])
47    .help(&["The executable to run."])
48    .build(exec_proc);
49  let eargs_spec = arg::Builder::new()
50    .name("execargs")
51    .nargs(arg::Nargs::Remainder, &["PRGARG"])
52    .help(&["arguments to pass to the executable."])
53    .build(eargs_proc);
54
55  let ctx = MyContext {
56    ..Default::default()
57  };
58  let mut prsr = arg::Parser::from_env(ctx);
59
60  prsr.add(help_spec)?;
61  prsr.add(exec_spec)?;
62  prsr.add(eargs_spec)?;
63
64  prsr.parse()?;
65
66  if prsr.get_ctx().do_help == true {
67    prsr.usage(&mut std::io::stdout());
68    std::process::exit(0);
69  }
70
71  let ctx = prsr.into_ctx();
72
73  println!("{:?}", &ctx);
74
75  Ok(())
76}
examples/hidden.rs (line 53)
11fn main() -> Result<(), Box<dyn std::error::Error>> {
12  let help_spec = arg::Builder::new()
13    .sopt('h')
14    .lopt("help")
15    .exit(true)
16    .help(&["Show this help."])
17    .build(
18      |_spec: &arg::Spec<MyContext>,
19       ctx: &mut MyContext,
20       _args: &Vec<String>| ctx.do_help = true
21    );
22  let version_spec = arg::Builder::new()
23    .sopt('V')
24    .lopt("version")
25    .exit(true)
26    .help(&["Output tool version and exit."])
27    .build(
28      |_spec: &arg::Spec<MyContext>,
29       ctx: &mut MyContext,
30       _args: &Vec<String>| ctx.do_version = true
31    );
32  let secret_spec = arg::Builder::new()
33    .sopt('s')
34    .lopt("secret")
35    .hidden(true)
36    .help(&["A hidden option."])
37    .build(
38      |_spec: &arg::Spec<MyContext>,
39       ctx: &mut MyContext,
40       _args: &Vec<String>| ctx.do_secret = true
41    );
42
43
44  let ctx = MyContext {
45    ..Default::default()
46  };
47  let mut prsr = arg::Parser::from_env(ctx);
48
49  prsr.add(help_spec)?;
50  prsr.add(version_spec)?;
51  prsr.add(secret_spec)?;
52
53  prsr.parse()?;
54
55  if prsr.get_ctx().do_help == true {
56    prsr.usage(&mut std::io::stdout());
57    std::process::exit(0);
58  }
59
60  let ctx = prsr.into_ctx();
61
62  println!("{:?}", &ctx);
63
64  Ok(())
65}
examples/usage.rs (line 63)
19fn main() -> Result<(), Box<dyn std::error::Error>> {
20  let help_spec = arg::Builder::new()
21    .sopt('h')
22    .lopt("help")
23    .exit(true)
24    .help(&["Show this help."])
25    .build(|_spec, ctx: &mut MyContext, _args| {
26      ctx.do_help = true;
27    });
28  let version_spec = arg::Builder::new()
29    .sopt('V')
30    .lopt("version")
31    .exit(true)
32    .help(&["Output tool version and exit."])
33    .build(
34      |_spec: &arg::Spec<MyContext>,
35       ctx: &mut MyContext,
36       _args: &Vec<String>| ctx.do_version = true
37    );
38  let tophelp_spec = arg::Builder::new()
39    .sopt('t')
40    .lopt("tophelp")
41    .help(&["Show top help."])
42    .build(|_spec, ctx: &mut MyContext, _args| {
43      ctx.tophelp = true;
44    });
45  let bottomhelp_spec = arg::Builder::new()
46    .sopt('b')
47    .lopt("bottomhelp")
48    .help(&["Show bottom help."])
49    .build(|_spec, ctx: &mut MyContext, _args| {
50      ctx.bottomhelp = true;
51    });
52
53  let ctx = MyContext {
54    ..Default::default()
55  };
56  let mut prsr = arg::Parser::from_env(ctx);
57
58  prsr.add(help_spec)?;
59  prsr.add(version_spec)?;
60  prsr.add(tophelp_spec)?;
61  prsr.add(bottomhelp_spec)?;
62
63  prsr.parse()?;
64
65  if prsr.get_ctx().do_help == true {
66    prsr.usage(&mut std::io::stdout());
67    std::process::exit(0);
68  }
69
70  if prsr.get_ctx().do_version == true {
71    const VERSION: &'static str = env!("CARGO_PKG_VERSION");
72    println!("usage {}", VERSION);
73    std::process::exit(0);
74  }
75
76  let ctx = prsr.into_ctx();
77
78  println!("{:?}", &ctx);
79
80  usage_test(ctx)?;
81
82  Ok(())
83}
84
85
86fn usage_test(ctx: MyContext) -> Result<(), Box<dyn std::error::Error>> {
87  let help_spec = arg::Builder::new()
88    .sopt('h')
89    .lopt("help")
90    .exit(true)
91    .help(&["Show this help."])
92    .build(|_spec, ctx: &mut MyContext, _args| {
93      ctx.do_help = true;
94    });
95  let version_spec = arg::Builder::new()
96    .sopt('V')
97    .lopt("version")
98    .exit(true)
99    .help(&["Output tool version and exit."])
100    .build(
101      |_spec: &arg::Spec<MyContext>,
102       ctx: &mut MyContext,
103       _args: &Vec<String>| ctx.do_version = true
104    );
105  let file_spec = arg::Builder::new()
106    .sopt('f')
107    .lopt("file")
108    .help(&["Use data in FILE."])
109    .nargs(arg::Nargs::Count(1), &["FILE"])
110    .build(|_spec, ctx: &mut MyContext, args| {
111      ctx.fname = args[0].clone();
112    });
113  let param_spec = arg::Builder::new()
114    .sopt('p')
115    .lopt("param")
116    .help(&["Add a key/value parameter field. The key must be unique."])
117    .nargs(arg::Nargs::Count(2), &["KEY", "VALUE"])
118    .build(|_spec, ctx: &mut MyContext, args| {
119      ctx.params.insert(args[0].clone(), args[1].clone());
120    });
121  let cmd_spec = arg::Builder::new()
122    .name("command")
123    .required(true)
124    .nargs(arg::Nargs::Count(1), &["COMMAND"])
125    .help(&["The command to run."])
126    .build(|_spec, ctx: &mut MyContext, args| {
127      ctx.cmd = args[0].clone();
128    });
129  let subcmd_spec = arg::Builder::new()
130    .name("subcmd")
131    .nargs(arg::Nargs::Count(1), &["SUBCMD"])
132    .help(&["Command-specific sub-command."])
133    .build(|_spec, ctx: &mut MyContext, args| {
134      ctx.subcmd = args[0].clone();
135    });
136
137  let ctx2 = MyContext {
138    ..Default::default()
139  };
140  let mut prsr = arg::Parser::from_args("hello", &["--help"], ctx2);
141
142  if ctx.tophelp {
143    prsr.set_tophelp(&[
144      "\"You know,\" said Arthur, \"it's at times like this, when I'm \
145       trapped in a Vogon airlock with a man from Betelgeuse, and about to \
146       die of asphyxiation in deep space that I really wish I'd listened to \
147       what my mother told me when I was young.\"",
148      "\"Why, what did she tell you?\"",
149      "\"I don't know, I didn't listen.\""
150    ]);
151  }
152  if ctx.bottomhelp {
153    prsr.set_bottomhelp(&[
154      "\"So this is it,\" said Arthur, \"We are going to die.\"",
155      "\"Yes,\" said Ford, \"except... no! Wait a minute!\" He suddenly \
156       lunged across the chamber at something behind Arthur's line of \
157       vision. \"What's this switch?\" he cried.",
158      "\"What? Where?\" cried Arthur, twisting round.",
159      "\"No, I was only fooling,\" said Ford, \"we are going to die after \
160       all.\""
161    ]);
162  }
163
164  prsr.add(help_spec)?;
165  prsr.add(version_spec)?;
166  prsr.add(file_spec)?;
167  prsr.add(param_spec)?;
168  prsr.add(cmd_spec)?;
169  prsr.add(subcmd_spec)?;
170
171  prsr.parse()?;
172
173  if prsr.get_ctx().do_help == true {
174    prsr.usage(&mut std::io::stdout());
175    std::process::exit(0);
176  }
177
178  let ctx = prsr.into_ctx();
179
180  println!("{:?}", &ctx);
181
182  Ok(())
183}
examples/simple.rs (line 132)
72fn main() -> Result<(), Box<dyn std::error::Error>> {
73  let help_spec = arg::Builder::new()
74    .sopt('h')
75    .lopt("help")
76    .exit(true)
77    .help(&["Show this help."])
78    .build(help_proc);
79  let verbose_spec = arg::Builder::new()
80    .sopt('v')
81    .lopt("verbose")
82    .help(&["Increase level of verbosity.", "Be quiet by default."])
83    .build(verbose_proc);
84  let version_spec = arg::Builder::new()
85    .sopt('V')
86    .lopt("version")
87    .exit(true)
88    .help(&["Output tool version and exit."])
89    .build(
90      |_spec: &arg::Spec<MyContext>,
91       ctx: &mut MyContext,
92       _args: &Vec<String>| ctx.do_version = true
93    );
94  let file_spec = arg::Builder::new()
95    .sopt('f')
96    .lopt("file")
97    .help(&["Use data in FILE."])
98    .nargs(arg::Nargs::Count(1), &["FILE"])
99    .build(file_proc);
100  let param_spec = arg::Builder::new()
101    .sopt('p')
102    .lopt("param")
103    .help(&["Add a key/value parameter field. The key must be unique."])
104    .nargs(arg::Nargs::Count(2), &["KEY", "VALUE"])
105    .build(param_proc);
106  let cmd_spec = arg::Builder::new()
107    .name("command")
108    .required(true)
109    .nargs(arg::Nargs::Count(1), &["COMMAND"])
110    .help(&["The command to run."])
111    .build(cmd_proc);
112  let subcmd_spec = arg::Builder::new()
113    .name("subcmd")
114    .nargs(arg::Nargs::Count(1), &["SUBCMD"])
115    .help(&["Command-specific sub-command."])
116    .build(subcmd_proc);
117
118
119  let ctx = MyContext {
120    ..Default::default()
121  };
122  let mut prsr = arg::Parser::from_env(ctx);
123
124  prsr.add(help_spec)?;
125  prsr.add(verbose_spec)?;
126  prsr.add(version_spec)?;
127  prsr.add(file_spec)?;
128  prsr.add(param_spec)?;
129  prsr.add(cmd_spec)?;
130  prsr.add(subcmd_spec)?;
131
132  prsr.parse()?;
133
134  if prsr.get_ctx().do_help == true {
135    prsr.usage(&mut std::io::stdout());
136    std::process::exit(0);
137  }
138
139  let ctx = prsr.into_ctx();
140
141  println!("{:?}", &ctx);
142
143  Ok(())
144}
Source

pub fn next(&mut self) -> Result<Option<Rc<RefCell<Spec<C>>>>, ErrKind<C>>

Source

pub fn num_remaining_args(&self) -> usize

Source

pub fn num_remaining_posargspecs(&self) -> usize

Source

pub fn validate(&self) -> Result<(), ErrKind<C>>

Source

pub fn usage(&self, out: &mut dyn Write)

Print out help text for parser options.

Hidden options will not be displayed.

The overall format for the help text is:

Usage: <cmd> [options] [positional arguments]

[top help]

[options]

[positional arguments]

[bottom help]
Examples found in repository?
examples/conflict.rs (line 44)
17fn main() -> Result<(), Box<dyn std::error::Error>> {
18  let help_spec = arg::Builder::new()
19    .sopt('h')
20    .lopt("help")
21    .exit(true)
22    .help(&["Show this help."])
23    .build(help_proc);
24  let coll_spec = arg::Builder::new()
25    .sopt('h')
26    .lopt("hulp")
27    .exit(true)
28    .help(&["Show this help."])
29    .build(help_proc);
30
31
32  let ctx = MyContext {
33    ..Default::default()
34  };
35  let mut prsr = arg::Parser::from_env(ctx);
36
37  prsr.add(help_spec)?;
38  prsr.add(coll_spec)?;
39
40  prsr.parse()?;
41
42  //let ctx = prsr.into_ctx();
43  if prsr.get_ctx().do_help == true {
44    prsr.usage(&mut std::io::stdout());
45    std::process::exit(0);
46  }
47
48  println!("{:?}", prsr.get_ctx());
49
50  Ok(())
51}
More examples
Hide additional examples
examples/remaining.rs (line 67)
37fn main() -> Result<(), Box<dyn std::error::Error>> {
38  let help_spec = arg::Builder::new()
39    .sopt('h')
40    .lopt("help")
41    .exit(true)
42    .help(&["Show this help."])
43    .build(help_proc);
44  let exec_spec = arg::Builder::new()
45    .name("exec")
46    .nargs(arg::Nargs::Count(1), &["PRG"])
47    .help(&["The executable to run."])
48    .build(exec_proc);
49  let eargs_spec = arg::Builder::new()
50    .name("execargs")
51    .nargs(arg::Nargs::Remainder, &["PRGARG"])
52    .help(&["arguments to pass to the executable."])
53    .build(eargs_proc);
54
55  let ctx = MyContext {
56    ..Default::default()
57  };
58  let mut prsr = arg::Parser::from_env(ctx);
59
60  prsr.add(help_spec)?;
61  prsr.add(exec_spec)?;
62  prsr.add(eargs_spec)?;
63
64  prsr.parse()?;
65
66  if prsr.get_ctx().do_help == true {
67    prsr.usage(&mut std::io::stdout());
68    std::process::exit(0);
69  }
70
71  let ctx = prsr.into_ctx();
72
73  println!("{:?}", &ctx);
74
75  Ok(())
76}
examples/hidden.rs (line 56)
11fn main() -> Result<(), Box<dyn std::error::Error>> {
12  let help_spec = arg::Builder::new()
13    .sopt('h')
14    .lopt("help")
15    .exit(true)
16    .help(&["Show this help."])
17    .build(
18      |_spec: &arg::Spec<MyContext>,
19       ctx: &mut MyContext,
20       _args: &Vec<String>| ctx.do_help = true
21    );
22  let version_spec = arg::Builder::new()
23    .sopt('V')
24    .lopt("version")
25    .exit(true)
26    .help(&["Output tool version and exit."])
27    .build(
28      |_spec: &arg::Spec<MyContext>,
29       ctx: &mut MyContext,
30       _args: &Vec<String>| ctx.do_version = true
31    );
32  let secret_spec = arg::Builder::new()
33    .sopt('s')
34    .lopt("secret")
35    .hidden(true)
36    .help(&["A hidden option."])
37    .build(
38      |_spec: &arg::Spec<MyContext>,
39       ctx: &mut MyContext,
40       _args: &Vec<String>| ctx.do_secret = true
41    );
42
43
44  let ctx = MyContext {
45    ..Default::default()
46  };
47  let mut prsr = arg::Parser::from_env(ctx);
48
49  prsr.add(help_spec)?;
50  prsr.add(version_spec)?;
51  prsr.add(secret_spec)?;
52
53  prsr.parse()?;
54
55  if prsr.get_ctx().do_help == true {
56    prsr.usage(&mut std::io::stdout());
57    std::process::exit(0);
58  }
59
60  let ctx = prsr.into_ctx();
61
62  println!("{:?}", &ctx);
63
64  Ok(())
65}
examples/usage.rs (line 66)
19fn main() -> Result<(), Box<dyn std::error::Error>> {
20  let help_spec = arg::Builder::new()
21    .sopt('h')
22    .lopt("help")
23    .exit(true)
24    .help(&["Show this help."])
25    .build(|_spec, ctx: &mut MyContext, _args| {
26      ctx.do_help = true;
27    });
28  let version_spec = arg::Builder::new()
29    .sopt('V')
30    .lopt("version")
31    .exit(true)
32    .help(&["Output tool version and exit."])
33    .build(
34      |_spec: &arg::Spec<MyContext>,
35       ctx: &mut MyContext,
36       _args: &Vec<String>| ctx.do_version = true
37    );
38  let tophelp_spec = arg::Builder::new()
39    .sopt('t')
40    .lopt("tophelp")
41    .help(&["Show top help."])
42    .build(|_spec, ctx: &mut MyContext, _args| {
43      ctx.tophelp = true;
44    });
45  let bottomhelp_spec = arg::Builder::new()
46    .sopt('b')
47    .lopt("bottomhelp")
48    .help(&["Show bottom help."])
49    .build(|_spec, ctx: &mut MyContext, _args| {
50      ctx.bottomhelp = true;
51    });
52
53  let ctx = MyContext {
54    ..Default::default()
55  };
56  let mut prsr = arg::Parser::from_env(ctx);
57
58  prsr.add(help_spec)?;
59  prsr.add(version_spec)?;
60  prsr.add(tophelp_spec)?;
61  prsr.add(bottomhelp_spec)?;
62
63  prsr.parse()?;
64
65  if prsr.get_ctx().do_help == true {
66    prsr.usage(&mut std::io::stdout());
67    std::process::exit(0);
68  }
69
70  if prsr.get_ctx().do_version == true {
71    const VERSION: &'static str = env!("CARGO_PKG_VERSION");
72    println!("usage {}", VERSION);
73    std::process::exit(0);
74  }
75
76  let ctx = prsr.into_ctx();
77
78  println!("{:?}", &ctx);
79
80  usage_test(ctx)?;
81
82  Ok(())
83}
84
85
86fn usage_test(ctx: MyContext) -> Result<(), Box<dyn std::error::Error>> {
87  let help_spec = arg::Builder::new()
88    .sopt('h')
89    .lopt("help")
90    .exit(true)
91    .help(&["Show this help."])
92    .build(|_spec, ctx: &mut MyContext, _args| {
93      ctx.do_help = true;
94    });
95  let version_spec = arg::Builder::new()
96    .sopt('V')
97    .lopt("version")
98    .exit(true)
99    .help(&["Output tool version and exit."])
100    .build(
101      |_spec: &arg::Spec<MyContext>,
102       ctx: &mut MyContext,
103       _args: &Vec<String>| ctx.do_version = true
104    );
105  let file_spec = arg::Builder::new()
106    .sopt('f')
107    .lopt("file")
108    .help(&["Use data in FILE."])
109    .nargs(arg::Nargs::Count(1), &["FILE"])
110    .build(|_spec, ctx: &mut MyContext, args| {
111      ctx.fname = args[0].clone();
112    });
113  let param_spec = arg::Builder::new()
114    .sopt('p')
115    .lopt("param")
116    .help(&["Add a key/value parameter field. The key must be unique."])
117    .nargs(arg::Nargs::Count(2), &["KEY", "VALUE"])
118    .build(|_spec, ctx: &mut MyContext, args| {
119      ctx.params.insert(args[0].clone(), args[1].clone());
120    });
121  let cmd_spec = arg::Builder::new()
122    .name("command")
123    .required(true)
124    .nargs(arg::Nargs::Count(1), &["COMMAND"])
125    .help(&["The command to run."])
126    .build(|_spec, ctx: &mut MyContext, args| {
127      ctx.cmd = args[0].clone();
128    });
129  let subcmd_spec = arg::Builder::new()
130    .name("subcmd")
131    .nargs(arg::Nargs::Count(1), &["SUBCMD"])
132    .help(&["Command-specific sub-command."])
133    .build(|_spec, ctx: &mut MyContext, args| {
134      ctx.subcmd = args[0].clone();
135    });
136
137  let ctx2 = MyContext {
138    ..Default::default()
139  };
140  let mut prsr = arg::Parser::from_args("hello", &["--help"], ctx2);
141
142  if ctx.tophelp {
143    prsr.set_tophelp(&[
144      "\"You know,\" said Arthur, \"it's at times like this, when I'm \
145       trapped in a Vogon airlock with a man from Betelgeuse, and about to \
146       die of asphyxiation in deep space that I really wish I'd listened to \
147       what my mother told me when I was young.\"",
148      "\"Why, what did she tell you?\"",
149      "\"I don't know, I didn't listen.\""
150    ]);
151  }
152  if ctx.bottomhelp {
153    prsr.set_bottomhelp(&[
154      "\"So this is it,\" said Arthur, \"We are going to die.\"",
155      "\"Yes,\" said Ford, \"except... no! Wait a minute!\" He suddenly \
156       lunged across the chamber at something behind Arthur's line of \
157       vision. \"What's this switch?\" he cried.",
158      "\"What? Where?\" cried Arthur, twisting round.",
159      "\"No, I was only fooling,\" said Ford, \"we are going to die after \
160       all.\""
161    ]);
162  }
163
164  prsr.add(help_spec)?;
165  prsr.add(version_spec)?;
166  prsr.add(file_spec)?;
167  prsr.add(param_spec)?;
168  prsr.add(cmd_spec)?;
169  prsr.add(subcmd_spec)?;
170
171  prsr.parse()?;
172
173  if prsr.get_ctx().do_help == true {
174    prsr.usage(&mut std::io::stdout());
175    std::process::exit(0);
176  }
177
178  let ctx = prsr.into_ctx();
179
180  println!("{:?}", &ctx);
181
182  Ok(())
183}
examples/simple.rs (line 135)
72fn main() -> Result<(), Box<dyn std::error::Error>> {
73  let help_spec = arg::Builder::new()
74    .sopt('h')
75    .lopt("help")
76    .exit(true)
77    .help(&["Show this help."])
78    .build(help_proc);
79  let verbose_spec = arg::Builder::new()
80    .sopt('v')
81    .lopt("verbose")
82    .help(&["Increase level of verbosity.", "Be quiet by default."])
83    .build(verbose_proc);
84  let version_spec = arg::Builder::new()
85    .sopt('V')
86    .lopt("version")
87    .exit(true)
88    .help(&["Output tool version and exit."])
89    .build(
90      |_spec: &arg::Spec<MyContext>,
91       ctx: &mut MyContext,
92       _args: &Vec<String>| ctx.do_version = true
93    );
94  let file_spec = arg::Builder::new()
95    .sopt('f')
96    .lopt("file")
97    .help(&["Use data in FILE."])
98    .nargs(arg::Nargs::Count(1), &["FILE"])
99    .build(file_proc);
100  let param_spec = arg::Builder::new()
101    .sopt('p')
102    .lopt("param")
103    .help(&["Add a key/value parameter field. The key must be unique."])
104    .nargs(arg::Nargs::Count(2), &["KEY", "VALUE"])
105    .build(param_proc);
106  let cmd_spec = arg::Builder::new()
107    .name("command")
108    .required(true)
109    .nargs(arg::Nargs::Count(1), &["COMMAND"])
110    .help(&["The command to run."])
111    .build(cmd_proc);
112  let subcmd_spec = arg::Builder::new()
113    .name("subcmd")
114    .nargs(arg::Nargs::Count(1), &["SUBCMD"])
115    .help(&["Command-specific sub-command."])
116    .build(subcmd_proc);
117
118
119  let ctx = MyContext {
120    ..Default::default()
121  };
122  let mut prsr = arg::Parser::from_env(ctx);
123
124  prsr.add(help_spec)?;
125  prsr.add(verbose_spec)?;
126  prsr.add(version_spec)?;
127  prsr.add(file_spec)?;
128  prsr.add(param_spec)?;
129  prsr.add(cmd_spec)?;
130  prsr.add(subcmd_spec)?;
131
132  prsr.parse()?;
133
134  if prsr.get_ctx().do_help == true {
135    prsr.usage(&mut std::io::stdout());
136    std::process::exit(0);
137  }
138
139  let ctx = prsr.into_ctx();
140
141  println!("{:?}", &ctx);
142
143  Ok(())
144}
Source

pub fn print_usage(&self, out: &mut dyn Write)

Print the “Usage” part of the help.

The output format is:

Usage: <command> [arguments] [positional arguments]
Source

pub fn print_tophelp(&self, out: &mut dyn Write)

Source

pub fn print_bottomhelp(&self, out: &mut dyn Write)

Source

pub fn print_opts(&self, out: &mut dyn Write)

Print the help section for “options”. Options are arguments that have a short and/or long option name.

Source

pub fn print_posargs(&self, out: &mut dyn Write)

Print the help section for positional arguments.

Source

pub fn did_fail(&self) -> bool

Source

pub fn get_ctx(&self) -> &C

Examples found in repository?
examples/conflict.rs (line 43)
17fn main() -> Result<(), Box<dyn std::error::Error>> {
18  let help_spec = arg::Builder::new()
19    .sopt('h')
20    .lopt("help")
21    .exit(true)
22    .help(&["Show this help."])
23    .build(help_proc);
24  let coll_spec = arg::Builder::new()
25    .sopt('h')
26    .lopt("hulp")
27    .exit(true)
28    .help(&["Show this help."])
29    .build(help_proc);
30
31
32  let ctx = MyContext {
33    ..Default::default()
34  };
35  let mut prsr = arg::Parser::from_env(ctx);
36
37  prsr.add(help_spec)?;
38  prsr.add(coll_spec)?;
39
40  prsr.parse()?;
41
42  //let ctx = prsr.into_ctx();
43  if prsr.get_ctx().do_help == true {
44    prsr.usage(&mut std::io::stdout());
45    std::process::exit(0);
46  }
47
48  println!("{:?}", prsr.get_ctx());
49
50  Ok(())
51}
More examples
Hide additional examples
examples/remaining.rs (line 66)
37fn main() -> Result<(), Box<dyn std::error::Error>> {
38  let help_spec = arg::Builder::new()
39    .sopt('h')
40    .lopt("help")
41    .exit(true)
42    .help(&["Show this help."])
43    .build(help_proc);
44  let exec_spec = arg::Builder::new()
45    .name("exec")
46    .nargs(arg::Nargs::Count(1), &["PRG"])
47    .help(&["The executable to run."])
48    .build(exec_proc);
49  let eargs_spec = arg::Builder::new()
50    .name("execargs")
51    .nargs(arg::Nargs::Remainder, &["PRGARG"])
52    .help(&["arguments to pass to the executable."])
53    .build(eargs_proc);
54
55  let ctx = MyContext {
56    ..Default::default()
57  };
58  let mut prsr = arg::Parser::from_env(ctx);
59
60  prsr.add(help_spec)?;
61  prsr.add(exec_spec)?;
62  prsr.add(eargs_spec)?;
63
64  prsr.parse()?;
65
66  if prsr.get_ctx().do_help == true {
67    prsr.usage(&mut std::io::stdout());
68    std::process::exit(0);
69  }
70
71  let ctx = prsr.into_ctx();
72
73  println!("{:?}", &ctx);
74
75  Ok(())
76}
examples/hidden.rs (line 55)
11fn main() -> Result<(), Box<dyn std::error::Error>> {
12  let help_spec = arg::Builder::new()
13    .sopt('h')
14    .lopt("help")
15    .exit(true)
16    .help(&["Show this help."])
17    .build(
18      |_spec: &arg::Spec<MyContext>,
19       ctx: &mut MyContext,
20       _args: &Vec<String>| ctx.do_help = true
21    );
22  let version_spec = arg::Builder::new()
23    .sopt('V')
24    .lopt("version")
25    .exit(true)
26    .help(&["Output tool version and exit."])
27    .build(
28      |_spec: &arg::Spec<MyContext>,
29       ctx: &mut MyContext,
30       _args: &Vec<String>| ctx.do_version = true
31    );
32  let secret_spec = arg::Builder::new()
33    .sopt('s')
34    .lopt("secret")
35    .hidden(true)
36    .help(&["A hidden option."])
37    .build(
38      |_spec: &arg::Spec<MyContext>,
39       ctx: &mut MyContext,
40       _args: &Vec<String>| ctx.do_secret = true
41    );
42
43
44  let ctx = MyContext {
45    ..Default::default()
46  };
47  let mut prsr = arg::Parser::from_env(ctx);
48
49  prsr.add(help_spec)?;
50  prsr.add(version_spec)?;
51  prsr.add(secret_spec)?;
52
53  prsr.parse()?;
54
55  if prsr.get_ctx().do_help == true {
56    prsr.usage(&mut std::io::stdout());
57    std::process::exit(0);
58  }
59
60  let ctx = prsr.into_ctx();
61
62  println!("{:?}", &ctx);
63
64  Ok(())
65}
examples/usage.rs (line 65)
19fn main() -> Result<(), Box<dyn std::error::Error>> {
20  let help_spec = arg::Builder::new()
21    .sopt('h')
22    .lopt("help")
23    .exit(true)
24    .help(&["Show this help."])
25    .build(|_spec, ctx: &mut MyContext, _args| {
26      ctx.do_help = true;
27    });
28  let version_spec = arg::Builder::new()
29    .sopt('V')
30    .lopt("version")
31    .exit(true)
32    .help(&["Output tool version and exit."])
33    .build(
34      |_spec: &arg::Spec<MyContext>,
35       ctx: &mut MyContext,
36       _args: &Vec<String>| ctx.do_version = true
37    );
38  let tophelp_spec = arg::Builder::new()
39    .sopt('t')
40    .lopt("tophelp")
41    .help(&["Show top help."])
42    .build(|_spec, ctx: &mut MyContext, _args| {
43      ctx.tophelp = true;
44    });
45  let bottomhelp_spec = arg::Builder::new()
46    .sopt('b')
47    .lopt("bottomhelp")
48    .help(&["Show bottom help."])
49    .build(|_spec, ctx: &mut MyContext, _args| {
50      ctx.bottomhelp = true;
51    });
52
53  let ctx = MyContext {
54    ..Default::default()
55  };
56  let mut prsr = arg::Parser::from_env(ctx);
57
58  prsr.add(help_spec)?;
59  prsr.add(version_spec)?;
60  prsr.add(tophelp_spec)?;
61  prsr.add(bottomhelp_spec)?;
62
63  prsr.parse()?;
64
65  if prsr.get_ctx().do_help == true {
66    prsr.usage(&mut std::io::stdout());
67    std::process::exit(0);
68  }
69
70  if prsr.get_ctx().do_version == true {
71    const VERSION: &'static str = env!("CARGO_PKG_VERSION");
72    println!("usage {}", VERSION);
73    std::process::exit(0);
74  }
75
76  let ctx = prsr.into_ctx();
77
78  println!("{:?}", &ctx);
79
80  usage_test(ctx)?;
81
82  Ok(())
83}
84
85
86fn usage_test(ctx: MyContext) -> Result<(), Box<dyn std::error::Error>> {
87  let help_spec = arg::Builder::new()
88    .sopt('h')
89    .lopt("help")
90    .exit(true)
91    .help(&["Show this help."])
92    .build(|_spec, ctx: &mut MyContext, _args| {
93      ctx.do_help = true;
94    });
95  let version_spec = arg::Builder::new()
96    .sopt('V')
97    .lopt("version")
98    .exit(true)
99    .help(&["Output tool version and exit."])
100    .build(
101      |_spec: &arg::Spec<MyContext>,
102       ctx: &mut MyContext,
103       _args: &Vec<String>| ctx.do_version = true
104    );
105  let file_spec = arg::Builder::new()
106    .sopt('f')
107    .lopt("file")
108    .help(&["Use data in FILE."])
109    .nargs(arg::Nargs::Count(1), &["FILE"])
110    .build(|_spec, ctx: &mut MyContext, args| {
111      ctx.fname = args[0].clone();
112    });
113  let param_spec = arg::Builder::new()
114    .sopt('p')
115    .lopt("param")
116    .help(&["Add a key/value parameter field. The key must be unique."])
117    .nargs(arg::Nargs::Count(2), &["KEY", "VALUE"])
118    .build(|_spec, ctx: &mut MyContext, args| {
119      ctx.params.insert(args[0].clone(), args[1].clone());
120    });
121  let cmd_spec = arg::Builder::new()
122    .name("command")
123    .required(true)
124    .nargs(arg::Nargs::Count(1), &["COMMAND"])
125    .help(&["The command to run."])
126    .build(|_spec, ctx: &mut MyContext, args| {
127      ctx.cmd = args[0].clone();
128    });
129  let subcmd_spec = arg::Builder::new()
130    .name("subcmd")
131    .nargs(arg::Nargs::Count(1), &["SUBCMD"])
132    .help(&["Command-specific sub-command."])
133    .build(|_spec, ctx: &mut MyContext, args| {
134      ctx.subcmd = args[0].clone();
135    });
136
137  let ctx2 = MyContext {
138    ..Default::default()
139  };
140  let mut prsr = arg::Parser::from_args("hello", &["--help"], ctx2);
141
142  if ctx.tophelp {
143    prsr.set_tophelp(&[
144      "\"You know,\" said Arthur, \"it's at times like this, when I'm \
145       trapped in a Vogon airlock with a man from Betelgeuse, and about to \
146       die of asphyxiation in deep space that I really wish I'd listened to \
147       what my mother told me when I was young.\"",
148      "\"Why, what did she tell you?\"",
149      "\"I don't know, I didn't listen.\""
150    ]);
151  }
152  if ctx.bottomhelp {
153    prsr.set_bottomhelp(&[
154      "\"So this is it,\" said Arthur, \"We are going to die.\"",
155      "\"Yes,\" said Ford, \"except... no! Wait a minute!\" He suddenly \
156       lunged across the chamber at something behind Arthur's line of \
157       vision. \"What's this switch?\" he cried.",
158      "\"What? Where?\" cried Arthur, twisting round.",
159      "\"No, I was only fooling,\" said Ford, \"we are going to die after \
160       all.\""
161    ]);
162  }
163
164  prsr.add(help_spec)?;
165  prsr.add(version_spec)?;
166  prsr.add(file_spec)?;
167  prsr.add(param_spec)?;
168  prsr.add(cmd_spec)?;
169  prsr.add(subcmd_spec)?;
170
171  prsr.parse()?;
172
173  if prsr.get_ctx().do_help == true {
174    prsr.usage(&mut std::io::stdout());
175    std::process::exit(0);
176  }
177
178  let ctx = prsr.into_ctx();
179
180  println!("{:?}", &ctx);
181
182  Ok(())
183}
examples/simple.rs (line 134)
72fn main() -> Result<(), Box<dyn std::error::Error>> {
73  let help_spec = arg::Builder::new()
74    .sopt('h')
75    .lopt("help")
76    .exit(true)
77    .help(&["Show this help."])
78    .build(help_proc);
79  let verbose_spec = arg::Builder::new()
80    .sopt('v')
81    .lopt("verbose")
82    .help(&["Increase level of verbosity.", "Be quiet by default."])
83    .build(verbose_proc);
84  let version_spec = arg::Builder::new()
85    .sopt('V')
86    .lopt("version")
87    .exit(true)
88    .help(&["Output tool version and exit."])
89    .build(
90      |_spec: &arg::Spec<MyContext>,
91       ctx: &mut MyContext,
92       _args: &Vec<String>| ctx.do_version = true
93    );
94  let file_spec = arg::Builder::new()
95    .sopt('f')
96    .lopt("file")
97    .help(&["Use data in FILE."])
98    .nargs(arg::Nargs::Count(1), &["FILE"])
99    .build(file_proc);
100  let param_spec = arg::Builder::new()
101    .sopt('p')
102    .lopt("param")
103    .help(&["Add a key/value parameter field. The key must be unique."])
104    .nargs(arg::Nargs::Count(2), &["KEY", "VALUE"])
105    .build(param_proc);
106  let cmd_spec = arg::Builder::new()
107    .name("command")
108    .required(true)
109    .nargs(arg::Nargs::Count(1), &["COMMAND"])
110    .help(&["The command to run."])
111    .build(cmd_proc);
112  let subcmd_spec = arg::Builder::new()
113    .name("subcmd")
114    .nargs(arg::Nargs::Count(1), &["SUBCMD"])
115    .help(&["Command-specific sub-command."])
116    .build(subcmd_proc);
117
118
119  let ctx = MyContext {
120    ..Default::default()
121  };
122  let mut prsr = arg::Parser::from_env(ctx);
123
124  prsr.add(help_spec)?;
125  prsr.add(verbose_spec)?;
126  prsr.add(version_spec)?;
127  prsr.add(file_spec)?;
128  prsr.add(param_spec)?;
129  prsr.add(cmd_spec)?;
130  prsr.add(subcmd_spec)?;
131
132  prsr.parse()?;
133
134  if prsr.get_ctx().do_help == true {
135    prsr.usage(&mut std::io::stdout());
136    std::process::exit(0);
137  }
138
139  let ctx = prsr.into_ctx();
140
141  println!("{:?}", &ctx);
142
143  Ok(())
144}
Source

pub fn into_ctx(self) -> C

Examples found in repository?
examples/remaining.rs (line 71)
37fn main() -> Result<(), Box<dyn std::error::Error>> {
38  let help_spec = arg::Builder::new()
39    .sopt('h')
40    .lopt("help")
41    .exit(true)
42    .help(&["Show this help."])
43    .build(help_proc);
44  let exec_spec = arg::Builder::new()
45    .name("exec")
46    .nargs(arg::Nargs::Count(1), &["PRG"])
47    .help(&["The executable to run."])
48    .build(exec_proc);
49  let eargs_spec = arg::Builder::new()
50    .name("execargs")
51    .nargs(arg::Nargs::Remainder, &["PRGARG"])
52    .help(&["arguments to pass to the executable."])
53    .build(eargs_proc);
54
55  let ctx = MyContext {
56    ..Default::default()
57  };
58  let mut prsr = arg::Parser::from_env(ctx);
59
60  prsr.add(help_spec)?;
61  prsr.add(exec_spec)?;
62  prsr.add(eargs_spec)?;
63
64  prsr.parse()?;
65
66  if prsr.get_ctx().do_help == true {
67    prsr.usage(&mut std::io::stdout());
68    std::process::exit(0);
69  }
70
71  let ctx = prsr.into_ctx();
72
73  println!("{:?}", &ctx);
74
75  Ok(())
76}
More examples
Hide additional examples
examples/hidden.rs (line 60)
11fn main() -> Result<(), Box<dyn std::error::Error>> {
12  let help_spec = arg::Builder::new()
13    .sopt('h')
14    .lopt("help")
15    .exit(true)
16    .help(&["Show this help."])
17    .build(
18      |_spec: &arg::Spec<MyContext>,
19       ctx: &mut MyContext,
20       _args: &Vec<String>| ctx.do_help = true
21    );
22  let version_spec = arg::Builder::new()
23    .sopt('V')
24    .lopt("version")
25    .exit(true)
26    .help(&["Output tool version and exit."])
27    .build(
28      |_spec: &arg::Spec<MyContext>,
29       ctx: &mut MyContext,
30       _args: &Vec<String>| ctx.do_version = true
31    );
32  let secret_spec = arg::Builder::new()
33    .sopt('s')
34    .lopt("secret")
35    .hidden(true)
36    .help(&["A hidden option."])
37    .build(
38      |_spec: &arg::Spec<MyContext>,
39       ctx: &mut MyContext,
40       _args: &Vec<String>| ctx.do_secret = true
41    );
42
43
44  let ctx = MyContext {
45    ..Default::default()
46  };
47  let mut prsr = arg::Parser::from_env(ctx);
48
49  prsr.add(help_spec)?;
50  prsr.add(version_spec)?;
51  prsr.add(secret_spec)?;
52
53  prsr.parse()?;
54
55  if prsr.get_ctx().do_help == true {
56    prsr.usage(&mut std::io::stdout());
57    std::process::exit(0);
58  }
59
60  let ctx = prsr.into_ctx();
61
62  println!("{:?}", &ctx);
63
64  Ok(())
65}
examples/usage.rs (line 76)
19fn main() -> Result<(), Box<dyn std::error::Error>> {
20  let help_spec = arg::Builder::new()
21    .sopt('h')
22    .lopt("help")
23    .exit(true)
24    .help(&["Show this help."])
25    .build(|_spec, ctx: &mut MyContext, _args| {
26      ctx.do_help = true;
27    });
28  let version_spec = arg::Builder::new()
29    .sopt('V')
30    .lopt("version")
31    .exit(true)
32    .help(&["Output tool version and exit."])
33    .build(
34      |_spec: &arg::Spec<MyContext>,
35       ctx: &mut MyContext,
36       _args: &Vec<String>| ctx.do_version = true
37    );
38  let tophelp_spec = arg::Builder::new()
39    .sopt('t')
40    .lopt("tophelp")
41    .help(&["Show top help."])
42    .build(|_spec, ctx: &mut MyContext, _args| {
43      ctx.tophelp = true;
44    });
45  let bottomhelp_spec = arg::Builder::new()
46    .sopt('b')
47    .lopt("bottomhelp")
48    .help(&["Show bottom help."])
49    .build(|_spec, ctx: &mut MyContext, _args| {
50      ctx.bottomhelp = true;
51    });
52
53  let ctx = MyContext {
54    ..Default::default()
55  };
56  let mut prsr = arg::Parser::from_env(ctx);
57
58  prsr.add(help_spec)?;
59  prsr.add(version_spec)?;
60  prsr.add(tophelp_spec)?;
61  prsr.add(bottomhelp_spec)?;
62
63  prsr.parse()?;
64
65  if prsr.get_ctx().do_help == true {
66    prsr.usage(&mut std::io::stdout());
67    std::process::exit(0);
68  }
69
70  if prsr.get_ctx().do_version == true {
71    const VERSION: &'static str = env!("CARGO_PKG_VERSION");
72    println!("usage {}", VERSION);
73    std::process::exit(0);
74  }
75
76  let ctx = prsr.into_ctx();
77
78  println!("{:?}", &ctx);
79
80  usage_test(ctx)?;
81
82  Ok(())
83}
84
85
86fn usage_test(ctx: MyContext) -> Result<(), Box<dyn std::error::Error>> {
87  let help_spec = arg::Builder::new()
88    .sopt('h')
89    .lopt("help")
90    .exit(true)
91    .help(&["Show this help."])
92    .build(|_spec, ctx: &mut MyContext, _args| {
93      ctx.do_help = true;
94    });
95  let version_spec = arg::Builder::new()
96    .sopt('V')
97    .lopt("version")
98    .exit(true)
99    .help(&["Output tool version and exit."])
100    .build(
101      |_spec: &arg::Spec<MyContext>,
102       ctx: &mut MyContext,
103       _args: &Vec<String>| ctx.do_version = true
104    );
105  let file_spec = arg::Builder::new()
106    .sopt('f')
107    .lopt("file")
108    .help(&["Use data in FILE."])
109    .nargs(arg::Nargs::Count(1), &["FILE"])
110    .build(|_spec, ctx: &mut MyContext, args| {
111      ctx.fname = args[0].clone();
112    });
113  let param_spec = arg::Builder::new()
114    .sopt('p')
115    .lopt("param")
116    .help(&["Add a key/value parameter field. The key must be unique."])
117    .nargs(arg::Nargs::Count(2), &["KEY", "VALUE"])
118    .build(|_spec, ctx: &mut MyContext, args| {
119      ctx.params.insert(args[0].clone(), args[1].clone());
120    });
121  let cmd_spec = arg::Builder::new()
122    .name("command")
123    .required(true)
124    .nargs(arg::Nargs::Count(1), &["COMMAND"])
125    .help(&["The command to run."])
126    .build(|_spec, ctx: &mut MyContext, args| {
127      ctx.cmd = args[0].clone();
128    });
129  let subcmd_spec = arg::Builder::new()
130    .name("subcmd")
131    .nargs(arg::Nargs::Count(1), &["SUBCMD"])
132    .help(&["Command-specific sub-command."])
133    .build(|_spec, ctx: &mut MyContext, args| {
134      ctx.subcmd = args[0].clone();
135    });
136
137  let ctx2 = MyContext {
138    ..Default::default()
139  };
140  let mut prsr = arg::Parser::from_args("hello", &["--help"], ctx2);
141
142  if ctx.tophelp {
143    prsr.set_tophelp(&[
144      "\"You know,\" said Arthur, \"it's at times like this, when I'm \
145       trapped in a Vogon airlock with a man from Betelgeuse, and about to \
146       die of asphyxiation in deep space that I really wish I'd listened to \
147       what my mother told me when I was young.\"",
148      "\"Why, what did she tell you?\"",
149      "\"I don't know, I didn't listen.\""
150    ]);
151  }
152  if ctx.bottomhelp {
153    prsr.set_bottomhelp(&[
154      "\"So this is it,\" said Arthur, \"We are going to die.\"",
155      "\"Yes,\" said Ford, \"except... no! Wait a minute!\" He suddenly \
156       lunged across the chamber at something behind Arthur's line of \
157       vision. \"What's this switch?\" he cried.",
158      "\"What? Where?\" cried Arthur, twisting round.",
159      "\"No, I was only fooling,\" said Ford, \"we are going to die after \
160       all.\""
161    ]);
162  }
163
164  prsr.add(help_spec)?;
165  prsr.add(version_spec)?;
166  prsr.add(file_spec)?;
167  prsr.add(param_spec)?;
168  prsr.add(cmd_spec)?;
169  prsr.add(subcmd_spec)?;
170
171  prsr.parse()?;
172
173  if prsr.get_ctx().do_help == true {
174    prsr.usage(&mut std::io::stdout());
175    std::process::exit(0);
176  }
177
178  let ctx = prsr.into_ctx();
179
180  println!("{:?}", &ctx);
181
182  Ok(())
183}
examples/simple.rs (line 139)
72fn main() -> Result<(), Box<dyn std::error::Error>> {
73  let help_spec = arg::Builder::new()
74    .sopt('h')
75    .lopt("help")
76    .exit(true)
77    .help(&["Show this help."])
78    .build(help_proc);
79  let verbose_spec = arg::Builder::new()
80    .sopt('v')
81    .lopt("verbose")
82    .help(&["Increase level of verbosity.", "Be quiet by default."])
83    .build(verbose_proc);
84  let version_spec = arg::Builder::new()
85    .sopt('V')
86    .lopt("version")
87    .exit(true)
88    .help(&["Output tool version and exit."])
89    .build(
90      |_spec: &arg::Spec<MyContext>,
91       ctx: &mut MyContext,
92       _args: &Vec<String>| ctx.do_version = true
93    );
94  let file_spec = arg::Builder::new()
95    .sopt('f')
96    .lopt("file")
97    .help(&["Use data in FILE."])
98    .nargs(arg::Nargs::Count(1), &["FILE"])
99    .build(file_proc);
100  let param_spec = arg::Builder::new()
101    .sopt('p')
102    .lopt("param")
103    .help(&["Add a key/value parameter field. The key must be unique."])
104    .nargs(arg::Nargs::Count(2), &["KEY", "VALUE"])
105    .build(param_proc);
106  let cmd_spec = arg::Builder::new()
107    .name("command")
108    .required(true)
109    .nargs(arg::Nargs::Count(1), &["COMMAND"])
110    .help(&["The command to run."])
111    .build(cmd_proc);
112  let subcmd_spec = arg::Builder::new()
113    .name("subcmd")
114    .nargs(arg::Nargs::Count(1), &["SUBCMD"])
115    .help(&["Command-specific sub-command."])
116    .build(subcmd_proc);
117
118
119  let ctx = MyContext {
120    ..Default::default()
121  };
122  let mut prsr = arg::Parser::from_env(ctx);
123
124  prsr.add(help_spec)?;
125  prsr.add(verbose_spec)?;
126  prsr.add(version_spec)?;
127  prsr.add(file_spec)?;
128  prsr.add(param_spec)?;
129  prsr.add(cmd_spec)?;
130  prsr.add(subcmd_spec)?;
131
132  prsr.parse()?;
133
134  if prsr.get_ctx().do_help == true {
135    prsr.usage(&mut std::io::stdout());
136    std::process::exit(0);
137  }
138
139  let ctx = prsr.into_ctx();
140
141  println!("{:?}", &ctx);
142
143  Ok(())
144}

Trait Implementations§

Source§

impl<C> Iterator for Parser<C>

Source§

type Item = Rc<RefCell<Spec<C>>>

The type of the elements being iterated over.
Source§

fn next(&mut self) -> Option<Self::Item>

Advances the iterator and returns the next value. Read more
Source§

fn next_chunk<const N: usize>( &mut self, ) -> Result<[Self::Item; N], IntoIter<Self::Item, N>>
where Self: Sized,

🔬This is a nightly-only experimental API. (iter_next_chunk)
Advances the iterator and returns an array containing the next N values. Read more
1.0.0 · Source§

fn size_hint(&self) -> (usize, Option<usize>)

Returns the bounds on the remaining length of the iterator. Read more
1.0.0 · Source§

fn count(self) -> usize
where Self: Sized,

Consumes the iterator, counting the number of iterations and returning it. Read more
1.0.0 · Source§

fn last(self) -> Option<Self::Item>
where Self: Sized,

Consumes the iterator, returning the last element. Read more
Source§

fn advance_by(&mut self, n: usize) -> Result<(), NonZero<usize>>

🔬This is a nightly-only experimental API. (iter_advance_by)
Advances the iterator by n elements. Read more
1.0.0 · Source§

fn nth(&mut self, n: usize) -> Option<Self::Item>

Returns the nth element of the iterator. Read more
1.28.0 · Source§

fn step_by(self, step: usize) -> StepBy<Self>
where Self: Sized,

Creates an iterator starting at the same point, but stepping by the given amount at each iteration. Read more
1.0.0 · Source§

fn chain<U>(self, other: U) -> Chain<Self, <U as IntoIterator>::IntoIter>
where Self: Sized, U: IntoIterator<Item = Self::Item>,

Takes two iterators and creates a new iterator over both in sequence. Read more
1.0.0 · Source§

fn zip<U>(self, other: U) -> Zip<Self, <U as IntoIterator>::IntoIter>
where Self: Sized, U: IntoIterator,

‘Zips up’ two iterators into a single iterator of pairs. Read more
Source§

fn intersperse(self, separator: Self::Item) -> Intersperse<Self>
where Self: Sized, Self::Item: Clone,

🔬This is a nightly-only experimental API. (iter_intersperse)
Creates a new iterator which places a copy of separator between adjacent items of the original iterator. Read more
Source§

fn intersperse_with<G>(self, separator: G) -> IntersperseWith<Self, G>
where Self: Sized, G: FnMut() -> Self::Item,

🔬This is a nightly-only experimental API. (iter_intersperse)
Creates a new iterator which places an item generated by separator between adjacent items of the original iterator. Read more
1.0.0 · Source§

fn map<B, F>(self, f: F) -> Map<Self, F>
where Self: Sized, F: FnMut(Self::Item) -> B,

Takes a closure and creates an iterator which calls that closure on each element. Read more
1.21.0 · Source§

fn for_each<F>(self, f: F)
where Self: Sized, F: FnMut(Self::Item),

Calls a closure on each element of an iterator. Read more
1.0.0 · Source§

fn filter<P>(self, predicate: P) -> Filter<Self, P>
where Self: Sized, P: FnMut(&Self::Item) -> bool,

Creates an iterator which uses a closure to determine if an element should be yielded. Read more
1.0.0 · Source§

fn filter_map<B, F>(self, f: F) -> FilterMap<Self, F>
where Self: Sized, F: FnMut(Self::Item) -> Option<B>,

Creates an iterator that both filters and maps. Read more
1.0.0 · Source§

fn enumerate(self) -> Enumerate<Self>
where Self: Sized,

Creates an iterator which gives the current iteration count as well as the next value. Read more
1.0.0 · Source§

fn peekable(self) -> Peekable<Self>
where Self: Sized,

Creates an iterator which can use the peek and peek_mut methods to look at the next element of the iterator without consuming it. See their documentation for more information. Read more
1.0.0 · Source§

fn skip_while<P>(self, predicate: P) -> SkipWhile<Self, P>
where Self: Sized, P: FnMut(&Self::Item) -> bool,

Creates an iterator that skips elements based on a predicate. Read more
1.0.0 · Source§

fn take_while<P>(self, predicate: P) -> TakeWhile<Self, P>
where Self: Sized, P: FnMut(&Self::Item) -> bool,

Creates an iterator that yields elements based on a predicate. Read more
1.57.0 · Source§

fn map_while<B, P>(self, predicate: P) -> MapWhile<Self, P>
where Self: Sized, P: FnMut(Self::Item) -> Option<B>,

Creates an iterator that both yields elements based on a predicate and maps. Read more
1.0.0 · Source§

fn skip(self, n: usize) -> Skip<Self>
where Self: Sized,

Creates an iterator that skips the first n elements. Read more
1.0.0 · Source§

fn take(self, n: usize) -> Take<Self>
where Self: Sized,

Creates an iterator that yields the first n elements, or fewer if the underlying iterator ends sooner. Read more
1.0.0 · Source§

fn scan<St, B, F>(self, initial_state: St, f: F) -> Scan<Self, St, F>
where Self: Sized, F: FnMut(&mut St, Self::Item) -> Option<B>,

An iterator adapter which, like fold, holds internal state, but unlike fold, produces a new iterator. Read more
1.0.0 · Source§

fn flat_map<U, F>(self, f: F) -> FlatMap<Self, U, F>
where Self: Sized, U: IntoIterator, F: FnMut(Self::Item) -> U,

Creates an iterator that works like map, but flattens nested structure. Read more
1.29.0 · Source§

fn flatten(self) -> Flatten<Self>
where Self: Sized, Self::Item: IntoIterator,

Creates an iterator that flattens nested structure. Read more
Source§

fn map_windows<F, R, const N: usize>(self, f: F) -> MapWindows<Self, F, N>
where Self: Sized, F: FnMut(&[Self::Item; N]) -> R,

🔬This is a nightly-only experimental API. (iter_map_windows)
Calls the given function f for each contiguous window of size N over self and returns an iterator over the outputs of f. Like slice::windows(), the windows during mapping overlap as well. Read more
1.0.0 · Source§

fn fuse(self) -> Fuse<Self>
where Self: Sized,

Creates an iterator which ends after the first None. Read more
1.0.0 · Source§

fn inspect<F>(self, f: F) -> Inspect<Self, F>
where Self: Sized, F: FnMut(&Self::Item),

Does something with each element of an iterator, passing the value on. Read more
1.0.0 · Source§

fn by_ref(&mut self) -> &mut Self
where Self: Sized,

Creates a “by reference” adapter for this instance of Iterator. Read more
1.0.0 · Source§

fn collect<B>(self) -> B
where B: FromIterator<Self::Item>, Self: Sized,

Transforms an iterator into a collection. Read more
Source§

fn try_collect<B>( &mut self, ) -> <<Self::Item as Try>::Residual as Residual<B>>::TryType
where Self: Sized, Self::Item: Try, <Self::Item as Try>::Residual: Residual<B>, B: FromIterator<<Self::Item as Try>::Output>,

🔬This is a nightly-only experimental API. (iterator_try_collect)
Fallibly transforms an iterator into a collection, short circuiting if a failure is encountered. Read more
Source§

fn collect_into<E>(self, collection: &mut E) -> &mut E
where E: Extend<Self::Item>, Self: Sized,

🔬This is a nightly-only experimental API. (iter_collect_into)
Collects all the items from an iterator into a collection. Read more
1.0.0 · Source§

fn partition<B, F>(self, f: F) -> (B, B)
where Self: Sized, B: Default + Extend<Self::Item>, F: FnMut(&Self::Item) -> bool,

Consumes an iterator, creating two collections from it. Read more
Source§

fn is_partitioned<P>(self, predicate: P) -> bool
where Self: Sized, P: FnMut(Self::Item) -> bool,

🔬This is a nightly-only experimental API. (iter_is_partitioned)
Checks if the elements of this iterator are partitioned according to the given predicate, such that all those that return true precede all those that return false. Read more
1.27.0 · Source§

fn try_fold<B, F, R>(&mut self, init: B, f: F) -> R
where Self: Sized, F: FnMut(B, Self::Item) -> R, R: Try<Output = B>,

An iterator method that applies a function as long as it returns successfully, producing a single, final value. Read more
1.27.0 · Source§

fn try_for_each<F, R>(&mut self, f: F) -> R
where Self: Sized, F: FnMut(Self::Item) -> R, R: Try<Output = ()>,

An iterator method that applies a fallible function to each item in the iterator, stopping at the first error and returning that error. Read more
1.0.0 · Source§

fn fold<B, F>(self, init: B, f: F) -> B
where Self: Sized, F: FnMut(B, Self::Item) -> B,

Folds every element into an accumulator by applying an operation, returning the final result. Read more
1.51.0 · Source§

fn reduce<F>(self, f: F) -> Option<Self::Item>
where Self: Sized, F: FnMut(Self::Item, Self::Item) -> Self::Item,

Reduces the elements to a single one, by repeatedly applying a reducing operation. Read more
Source§

fn try_reduce<R>( &mut self, f: impl FnMut(Self::Item, Self::Item) -> R, ) -> <<R as Try>::Residual as Residual<Option<<R as Try>::Output>>>::TryType
where Self: Sized, R: Try<Output = Self::Item>, <R as Try>::Residual: Residual<Option<Self::Item>>,

🔬This is a nightly-only experimental API. (iterator_try_reduce)
Reduces the elements to a single one by repeatedly applying a reducing operation. If the closure returns a failure, the failure is propagated back to the caller immediately. Read more
1.0.0 · Source§

fn all<F>(&mut self, f: F) -> bool
where Self: Sized, F: FnMut(Self::Item) -> bool,

Tests if every element of the iterator matches a predicate. Read more
1.0.0 · Source§

fn any<F>(&mut self, f: F) -> bool
where Self: Sized, F: FnMut(Self::Item) -> bool,

Tests if any element of the iterator matches a predicate. Read more
1.0.0 · Source§

fn find<P>(&mut self, predicate: P) -> Option<Self::Item>
where Self: Sized, P: FnMut(&Self::Item) -> bool,

Searches for an element of an iterator that satisfies a predicate. Read more
1.30.0 · Source§

fn find_map<B, F>(&mut self, f: F) -> Option<B>
where Self: Sized, F: FnMut(Self::Item) -> Option<B>,

Applies function to the elements of iterator and returns the first non-none result. Read more
Source§

fn try_find<R>( &mut self, f: impl FnMut(&Self::Item) -> R, ) -> <<R as Try>::Residual as Residual<Option<Self::Item>>>::TryType
where Self: Sized, R: Try<Output = bool>, <R as Try>::Residual: Residual<Option<Self::Item>>,

🔬This is a nightly-only experimental API. (try_find)
Applies function to the elements of iterator and returns the first true result or the first error. Read more
1.0.0 · Source§

fn position<P>(&mut self, predicate: P) -> Option<usize>
where Self: Sized, P: FnMut(Self::Item) -> bool,

Searches for an element in an iterator, returning its index. Read more
1.0.0 · Source§

fn max(self) -> Option<Self::Item>
where Self: Sized, Self::Item: Ord,

Returns the maximum element of an iterator. Read more
1.0.0 · Source§

fn min(self) -> Option<Self::Item>
where Self: Sized, Self::Item: Ord,

Returns the minimum element of an iterator. Read more
1.6.0 · Source§

fn max_by_key<B, F>(self, f: F) -> Option<Self::Item>
where B: Ord, Self: Sized, F: FnMut(&Self::Item) -> B,

Returns the element that gives the maximum value from the specified function. Read more
1.15.0 · Source§

fn max_by<F>(self, compare: F) -> Option<Self::Item>
where Self: Sized, F: FnMut(&Self::Item, &Self::Item) -> Ordering,

Returns the element that gives the maximum value with respect to the specified comparison function. Read more
1.6.0 · Source§

fn min_by_key<B, F>(self, f: F) -> Option<Self::Item>
where B: Ord, Self: Sized, F: FnMut(&Self::Item) -> B,

Returns the element that gives the minimum value from the specified function. Read more
1.15.0 · Source§

fn min_by<F>(self, compare: F) -> Option<Self::Item>
where Self: Sized, F: FnMut(&Self::Item, &Self::Item) -> Ordering,

Returns the element that gives the minimum value with respect to the specified comparison function. Read more
1.0.0 · Source§

fn unzip<A, B, FromA, FromB>(self) -> (FromA, FromB)
where FromA: Default + Extend<A>, FromB: Default + Extend<B>, Self: Sized + Iterator<Item = (A, B)>,

Converts an iterator of pairs into a pair of containers. Read more
1.36.0 · Source§

fn copied<'a, T>(self) -> Copied<Self>
where T: Copy + 'a, Self: Sized + Iterator<Item = &'a T>,

Creates an iterator which copies all of its elements. Read more
1.0.0 · Source§

fn cloned<'a, T>(self) -> Cloned<Self>
where T: Clone + 'a, Self: Sized + Iterator<Item = &'a T>,

Creates an iterator which clones all of its elements. Read more
Source§

fn array_chunks<const N: usize>(self) -> ArrayChunks<Self, N>
where Self: Sized,

🔬This is a nightly-only experimental API. (iter_array_chunks)
Returns an iterator over N elements of the iterator at a time. Read more
1.11.0 · Source§

fn sum<S>(self) -> S
where Self: Sized, S: Sum<Self::Item>,

Sums the elements of an iterator. Read more
1.11.0 · Source§

fn product<P>(self) -> P
where Self: Sized, P: Product<Self::Item>,

Iterates over the entire iterator, multiplying all the elements Read more
1.5.0 · Source§

fn cmp<I>(self, other: I) -> Ordering
where I: IntoIterator<Item = Self::Item>, Self::Item: Ord, Self: Sized,

Lexicographically compares the elements of this Iterator with those of another. Read more
Source§

fn cmp_by<I, F>(self, other: I, cmp: F) -> Ordering
where Self: Sized, I: IntoIterator, F: FnMut(Self::Item, <I as IntoIterator>::Item) -> Ordering,

🔬This is a nightly-only experimental API. (iter_order_by)
Lexicographically compares the elements of this Iterator with those of another with respect to the specified comparison function. Read more
1.5.0 · Source§

fn partial_cmp<I>(self, other: I) -> Option<Ordering>
where I: IntoIterator, Self::Item: PartialOrd<<I as IntoIterator>::Item>, Self: Sized,

Lexicographically compares the PartialOrd elements of this Iterator with those of another. The comparison works like short-circuit evaluation, returning a result without comparing the remaining elements. As soon as an order can be determined, the evaluation stops and a result is returned. Read more
Source§

fn partial_cmp_by<I, F>(self, other: I, partial_cmp: F) -> Option<Ordering>
where Self: Sized, I: IntoIterator, F: FnMut(Self::Item, <I as IntoIterator>::Item) -> Option<Ordering>,

🔬This is a nightly-only experimental API. (iter_order_by)
Lexicographically compares the elements of this Iterator with those of another with respect to the specified comparison function. Read more
1.5.0 · Source§

fn eq<I>(self, other: I) -> bool
where I: IntoIterator, Self::Item: PartialEq<<I as IntoIterator>::Item>, Self: Sized,

Determines if the elements of this Iterator are equal to those of another. Read more
Source§

fn eq_by<I, F>(self, other: I, eq: F) -> bool
where Self: Sized, I: IntoIterator, F: FnMut(Self::Item, <I as IntoIterator>::Item) -> bool,

🔬This is a nightly-only experimental API. (iter_order_by)
Determines if the elements of this Iterator are equal to those of another with respect to the specified equality function. Read more
1.5.0 · Source§

fn ne<I>(self, other: I) -> bool
where I: IntoIterator, Self::Item: PartialEq<<I as IntoIterator>::Item>, Self: Sized,

Determines if the elements of this Iterator are not equal to those of another. Read more
1.5.0 · Source§

fn lt<I>(self, other: I) -> bool
where I: IntoIterator, Self::Item: PartialOrd<<I as IntoIterator>::Item>, Self: Sized,

Determines if the elements of this Iterator are lexicographically less than those of another. Read more
1.5.0 · Source§

fn le<I>(self, other: I) -> bool
where I: IntoIterator, Self::Item: PartialOrd<<I as IntoIterator>::Item>, Self: Sized,

Determines if the elements of this Iterator are lexicographically less or equal to those of another. Read more
1.5.0 · Source§

fn gt<I>(self, other: I) -> bool
where I: IntoIterator, Self::Item: PartialOrd<<I as IntoIterator>::Item>, Self: Sized,

Determines if the elements of this Iterator are lexicographically greater than those of another. Read more
1.5.0 · Source§

fn ge<I>(self, other: I) -> bool
where I: IntoIterator, Self::Item: PartialOrd<<I as IntoIterator>::Item>, Self: Sized,

Determines if the elements of this Iterator are lexicographically greater than or equal to those of another. Read more
1.82.0 · Source§

fn is_sorted(self) -> bool
where Self: Sized, Self::Item: PartialOrd,

Checks if the elements of this iterator are sorted. Read more
1.82.0 · Source§

fn is_sorted_by<F>(self, compare: F) -> bool
where Self: Sized, F: FnMut(&Self::Item, &Self::Item) -> bool,

Checks if the elements of this iterator are sorted using the given comparator function. Read more
1.82.0 · Source§

fn is_sorted_by_key<F, K>(self, f: F) -> bool
where Self: Sized, F: FnMut(Self::Item) -> K, K: PartialOrd,

Checks if the elements of this iterator are sorted using the given key extraction function. Read more

Auto Trait Implementations§

§

impl<C> Freeze for Parser<C>
where C: Freeze,

§

impl<C> !RefUnwindSafe for Parser<C>

§

impl<C> !Send for Parser<C>

§

impl<C> !Sync for Parser<C>

§

impl<C> Unpin for Parser<C>
where C: Unpin,

§

impl<C> !UnwindSafe for Parser<C>

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<I> IntoIterator for I
where I: Iterator,

Source§

type Item = <I as Iterator>::Item

The type of the elements being iterated over.
Source§

type IntoIter = I

Which kind of iterator are we turning this into?
Source§

fn into_iter(self) -> I

Creates an iterator from a value. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.