optionee

The macro to creates option structure so easily.

(no dependencies, 170 lines pure safe codes, supported no-std)

Crates.io Licensed Twitter

| Docs | Latest Note |

toml [dependencies] optionee = "0.1.0"

How to

```rust optionee! {

InputOption {

    Id {
        min_length: u8 [>] 2, "id must be more than 3 bytes."
        max_length: u8 [<] 13, "id must be less than 12 bytes."
    }
    Password {
        encrypt: bool [=] true
        min_length: u8 [>] 5, "psasword must be more than 6 bytes."
        max_length: u8 [<] 20, "psasword must be less than 19 bytes."
    }

}

}

let mut id_t = InputOption.Id();

let user_input = 20;

assert!(idt.minlength.check(userinput).isok()); ```

More Examples

```rust orderable! {

pub struct Job {
    id: u32[*], // mark for comparing
    name: String,
    salary: u16[*], // ..
}

} optionee! {

pub TermOption {
        Password {
            max_opportunity: u8 [=] 3, "if you don't really remember your own password, please cider o restart with --reset flag."
            encrypt: bool [=] false
            min_length: u8 [>] 7, "password must be more than 8 lengths bytes."
            max_length: u8 [<] 21, "password must be less than 20 lengths bytes."
        }
}
SecondPrivateOpt {
        AnyName {
            name: String [=] "john".to_string(), "you are not John."
            job: Job [>] Job::new(0, "sales".to_string(), 29), "id must be more than 1, salary 30"
        }
        OldPerson {
            name: &'static str [=] "mia"
            age: u8 [>] 52
        }

}

}

let mut t1 = TermOption.Password().encrypt(true).minlength(3); t1.minlength .seterrormessage(Some("password must be more than 3 lengths bytes."));

assert!(t1.encrypt.getvalue()); assert!(t1.minlength.check(4).is_ok());

let t2 = SecondPrivateOpt .AnyName() .job(Job::new(0, "writer".to_string(), 29));

assert!(t2.name.check("john".tostring()).isok()); assert!(t2.job.check(Job::new(1, "artist".tostring(), 30)).isok()); ```