Union
#[derive(Union)] generates variant accessor methods for enums: is_*(), as_*(), and to_*().
use moxy::Union;
#[derive(Union)]
enum Shape {
Circle(f64),
Rect { width: f64, height: f64 },
Point,
}
This generates:
is_circle(),is_rect(),is_point()— boolean predicatesas_circle(),as_rect()— borrow variant data asOption<&T>orOption<(&T1, &T2)>to_circle(),to_rect()— clone variant data asOption<T>orOption<(T1, T2)>
Unit variants only get is_*() since there is no data to access.
Attribute Helpers
Use #[moxy(variant(...))] on individual variants:
| Attribute | Effect |
|---|---|
alias = "name" | Rename generated methods (is_name, as_name, to_name) |
skip | Skip all method generation for this variant |
use moxy::Union;
#[derive(Union)]
enum Token {
#[moxy(variant(alias = "ident"))]
Identifier(String),
#[moxy(variant(skip))]
Eof,
}
let t = Token::Identifier("foo".into());
assert!(t.is_ident());
assert_eq!(t.as_ident(), Some(&"foo".to_string()));
See Also
- Variant Methods — return types for each variant kind
- Common Fields — auto-detected shared field accessors
- unionize! — shorthand macro for generating union-type enums