aboutsummaryrefslogtreecommitdiff
path: root/examples/ini/main.rs
diff options
context:
space:
mode:
Diffstat (limited to 'examples/ini/main.rs')
-rw-r--r--examples/ini/main.rs60
1 files changed, 60 insertions, 0 deletions
diff --git a/examples/ini/main.rs b/examples/ini/main.rs
new file mode 100644
index 0000000..8f61d18
--- /dev/null
+++ b/examples/ini/main.rs
@@ -0,0 +1,60 @@
+use winnow::prelude::*;
+
+mod parser;
+mod parser_str;
+
+fn main() -> Result<(), lexopt::Error> {
+ let args = Args::parse()?;
+
+ let input = args.input.as_deref().unwrap_or("1 + 1");
+
+ if args.binary {
+ match parser::categories.parse(input.as_bytes()) {
+ Ok(result) => {
+ println!(" {:?}", result);
+ }
+ Err(err) => {
+ println!(" {:?}", err);
+ }
+ }
+ } else {
+ match parser_str::categories.parse(input) {
+ Ok(result) => {
+ println!(" {:?}", result);
+ }
+ Err(err) => {
+ println!(" {}", err);
+ }
+ }
+ }
+
+ Ok(())
+}
+
+#[derive(Default)]
+struct Args {
+ input: Option<String>,
+ binary: bool,
+}
+
+impl Args {
+ fn parse() -> Result<Self, lexopt::Error> {
+ use lexopt::prelude::*;
+
+ let mut res = Args::default();
+
+ let mut args = lexopt::Parser::from_env();
+ while let Some(arg) = args.next()? {
+ match arg {
+ Long("binary") => {
+ res.binary = true;
+ }
+ Value(input) => {
+ res.input = Some(input.string()?);
+ }
+ _ => return Err(arg.unexpected()),
+ }
+ }
+ Ok(res)
+ }
+}