1 mod parser;
2 
main() -> Result<(), lexopt::Error>3 fn main() -> Result<(), lexopt::Error> {
4     let args = Args::parse()?;
5 
6     let input = args.input.as_deref().unwrap_or(
7         "GET / HTTP/1.1
8 Host: www.reddit.com
9 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.8; rv:15.0) Gecko/20100101 Firefox/15.0.1
10 Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
11 Accept-Language: en-us,en;q=0.5
12 Accept-Encoding: gzip, deflate
13 Connection: keep-alive
14 
15 ",
16     );
17 
18     if let Some(result) = parser::parse(input.as_bytes()) {
19         println!("  {:#?}", result);
20     }
21 
22     Ok(())
23 }
24 
25 #[derive(Default)]
26 struct Args {
27     input: Option<String>,
28 }
29 
30 impl Args {
parse() -> Result<Self, lexopt::Error>31     fn parse() -> Result<Self, lexopt::Error> {
32         use lexopt::prelude::*;
33 
34         let mut res = Args::default();
35 
36         let mut args = lexopt::Parser::from_env();
37         while let Some(arg) = args.next()? {
38             match arg {
39                 Value(input) => {
40                     res.input = Some(input.string()?);
41                 }
42                 _ => return Err(arg.unexpected()),
43             }
44         }
45         Ok(res)
46     }
47 }
48