https://github.com/just-do-halee/optionee
The macro to creates option structure so easily.
https://github.com/just-do-halee/optionee
configuration data-structures development-tools macro no-std option rust utility
Last synced: 4 months ago
JSON representation
The macro to creates option structure so easily.
- Host: GitHub
- URL: https://github.com/just-do-halee/optionee
- Owner: just-do-halee
- License: apache-2.0
- Created: 2021-08-24T09:46:21.000Z (about 4 years ago)
- Default Branch: main
- Last Pushed: 2021-09-04T15:35:07.000Z (about 4 years ago)
- Last Synced: 2025-05-19T00:17:57.276Z (5 months ago)
- Topics: configuration, data-structures, development-tools, macro, no-std, option, rust, utility
- Language: Rust
- Homepage:
- Size: 10.7 KB
- Stars: 2
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG.md
- License: LICENSE-APACHE
Awesome Lists containing this project
README
# optionee
The macro to create option struct easily.
(no-std support)[![CI][ci-badge]][ci-url]
[![Crates.io][crates-badge]][crates-url]
[![Licensed][license-badge]][license-url]
[![Twitter][twitter-badge]][twitter-url][ci-badge]: https://github.com/just-do-halee/optionee/actions/workflows/ci.yml/badge.svg
[crates-badge]: https://img.shields.io/crates/v/optionee.svg?labelColor=383636
[license-badge]: https://img.shields.io/crates/l/optionee?labelColor=383636
[twitter-badge]: https://img.shields.io/twitter/follow/do_halee?style=flat&logo=twitter&color=4a4646&labelColor=333131&label=just-do-halee[ci-url]: https://github.com/just-do-halee/optionee/actions
[twitter-url]: https://twitter.com/do_halee
[crates-url]: https://crates.io/crates/optionee
[license-url]: https://github.com/just-do-halee/optionee
| [Docs](https://docs.rs/optionee) | [Latest Note](https://github.com/just-do-halee/optionee/blob/main/CHANGELOG.md) |```toml
[dependencies]
optionee = "0.2.0"
```or
```toml
[dependencies]
optionee = { version = "0.2.0", default-features = false } # no-std(alloc)
```## 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!(id_t.min_length.check(user_input).is_ok());
```
## 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()
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).min_length(3);
t1.min_length
.set_error_message(Some("password must be more than 3 lengths bytes."));assert!(t1.encrypt.get_value());
assert!(t1.min_length.check(4).is_ok());let t2 = SecondPrivateOpt
.AnyName()
.job(Job::new(0, "writer".to_string(), 29));assert!(t2.name.check("john".to_string()).is_ok());
assert!(t2.job.check(Job::new(1, "artist".to_string(), 30)).is_ok());
```