https://github.com/lusingander/itsuki
macro that defines a simple zero-based sequential enum ⭐️
https://github.com/lusingander/itsuki
enum macros rust
Last synced: 10 months ago
JSON representation
macro that defines a simple zero-based sequential enum ⭐️
- Host: GitHub
- URL: https://github.com/lusingander/itsuki
- Owner: lusingander
- License: mit
- Created: 2024-03-26T09:04:40.000Z (almost 2 years ago)
- Default Branch: master
- Last Pushed: 2024-05-11T06:30:02.000Z (over 1 year ago)
- Last Synced: 2024-08-17T11:11:01.719Z (over 1 year ago)
- Topics: enum, macros, rust
- Language: Rust
- Homepage:
- Size: 16.6 KB
- Stars: 2
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# itsuki
[](https://crates.io/crates/itsuki)
macro that defines a simple zero-based sequential enum ⭐️
## Usage
### Function-like
```rs
use itsuki::define_zero_indexed_enum;
define_zero_indexed_enum! {
Quintuplets => [Ichika, Nino, Miku, Yotsuba, Itsuki]
}
let miku = Quintuplets::Miku;
assert_eq!(miku, Quintuplets::Miku);
assert_ne!(miku, Quintuplets::Nino);
assert_eq!(Quintuplets::len(), 5);
use Quintuplets::*;
assert_eq!(Quintuplets::vars_vec(), vec![Ichika, Nino, Miku, Yotsuba, Itsuki]);
assert_eq!(Quintuplets::vars_array(), [Ichika, Nino, Miku, Yotsuba, Itsuki]);
assert_eq!(Nino.next(), Miku);
assert_eq!(Itsuki.next(), Ichika);
assert_eq!(Yotsuba.prev(), Miku);
assert_eq!(Ichika.prev(), Itsuki);
assert_eq!(Ichika.next_in(|q| [Miku, Yotsuba].contains(&q)), Miku);
assert_eq!(Miku.next_in(|q| [Miku, Yotsuba].contains(&q)), Yotsuba);
assert_eq!(Nino.prev_in(|q| [Miku, Yotsuba].contains(&q)), Yotsuba);
assert_eq!(Yotsuba.prev_in(|q| [Miku, Yotsuba].contains(&q)), Miku);
assert_eq!(Miku.val(), 2);
assert_eq!(Yotsuba.val(), 3);
assert_eq!(Quintuplets::try_from(0), Ok(Ichika));
assert_eq!(Quintuplets::try_from(4), Ok(Itsuki));
assert_eq!(Quintuplets::try_from(5), Err(()));
assert_eq!(1.try_into(), Ok(Nino));
assert_eq!(3.try_into(), Ok(Yotsuba));
```
### Derive
```rs
use itsuki::ZeroIndexedEnum;
#[derive(ZeroIndexedEnum, Debug, Clone, Copy, PartialEq, Eq)]
enum Quintuplets {
Ichika,
Nino,
Miku,
Yotsuba,
Itsuki,
}
```
### Attribute
```rs
use itsuki::zero_indexed_enum;
#[zero_indexed_enum]
enum Quintuplets {
Ichika,
Nino,
Miku,
Yotsuba,
Itsuki,
}
```
## License
MIT