banjin

Build Status Crates.io Documentation dependency status

Simple code generator for manual parsing

Attributes

Struct

There are several attributes that control behaviour of parser Each, attached to struct's field

Formats

Enum

Usage

Struct

```rust use std::str::FromStr;

[derive(banjin::Parser)]

pub struct Data { #[startswith = "prefix"] #[skip(ws)] #[startswith = "+"] #[skip(ws)] #[format(ascii)] #[format(digit(10))] pub first: u32, #[skip(ws)] #[format(not("d"))] #[format("13")] #[endswith = "d"] #[endswith = ""] pub second: String, }

fn main() { let data = Data::fromstr("prefix + 666 13d").expect("Parse"); asserteq!(data.first, 666); assert_eq!(data.second, "13");

let data = Data::from_str("prefix + 666   13");
assert!(data.is_err());

let data = Data::from_str("prefix 666   13d");
assert!(data.is_err());

let data = Data::from_str("prefix + 666   13dg");
assert!(data.is_err());

let data = Data::from_str("");
assert!(data.is_err());

}

```

Enum

```rust use std::str::FromStr;

[derive(banjin::Parser, PartialEq, Eq, Debug)]

enum Gender { Male, #[case] Female, #[default] Other(String) }

fn main() { let gender = Gender::fromstr("male").expect("Parse"); asserteq!(gender, Gender::Male);

let gender = Gender::from_str("female").expect("Parse");
match gender {
    Gender::Other(text) => assert_eq!(text, "female"),
    _ => panic!("Unexpected!")
}

let gender = Gender::from_str("none").expect("Parse");
match gender {
    Gender::Other(text) => assert_eq!(text, "none"),
    _ => panic!("Unexpected!")
}

} ```