macro_rules! flavor { ( $(#[doc = $doc:literal])* $vis:vis struct $ty:ident { type Index = $index:ty; $(type Width = $width:ty;)? $(type Storage = $storage:ty;)? $(type Indexes = $indexes:ty;)? } ) => { ... }; (@width $ty:ty) => { ... }; (@width) => { ... }; (@pointer $ty:ty) => { ... }; (@pointer) => { ... }; (@indexes $ty:ty) => { ... }; (@indexes) => { ... }; }
Expand description
Declare a new flavor.
The available type parameters are:
type Index
which declares the index to use.type Width
which declares the width to use, defaults tousize
.
ยงExamples
use syntree::{Empty, EmptyVec, TreeIndex};
syntree::flavor! {
struct FlavorEmpty {
type Index = Empty;
type Indexes = EmptyVec<TreeIndex<Self>>;
}
}
syntree::flavor! {
struct FlavorU32 {
type Index = u32;
type Width = u32;
}
}