| Crates.io | predicate-macros |
| lib.rs | predicate-macros |
| version | 0.1.0 |
| created_at | 2021-10-19 16:58:25.92143+00 |
| updated_at | 2021-10-19 16:58:25.92143+00 |
| description | Easy to implement predicate crate traits |
| homepage | https://github.com/Spxg/predicate-macros |
| repository | https://github.com/Spxg/predicate-macros |
| max_upload_size | |
| id | 467426 |
| size | 7,487 |
Easy to implement predicate traits.
#[add_field]
#[derive(BitAnd, BitOr, OpUnitTrait)]
enum NumType {
Odd,
Even,
DivByThree,
DivByFour,
DivByFive,
IsMagicNum(i32),
}
expand:
enum NumType {
Odd,
Even,
DivByThree,
DivByFour,
DivByFive,
IsMagicNum(i32),
Unit(OpUnitInnerType<OpUnit<NumType>>),
}
impl std::ops::BitAnd for NumType {
type Output = Self;
fn bitand(self, rhs: Self) -> Self::Output {
let node = OpUnit::new(
Some(OpUnitInnerType::new(self)),
Some(OpUnitInnerType::new(rhs)),
Operation::And,
);
NumType::Unit(OpUnitInnerType::new(node))
}
}
impl std::ops::BitOr for NumType {
type Output = Self;
fn bitor(self, rhs: Self) -> Self::Output {
let node = OpUnit::new(
Some(OpUnitInnerType::new(self)),
Some(OpUnitInnerType::new(rhs)),
Operation::Or,
);
NumType::Unit(OpUnitInnerType::new(node))
}
}
impl OpUnitTrait for NumType {
fn get_op_unit(self: &OpUnitInnerType<Self>) -> OpUnitInnerType<OpUnit<Self>> {
match self.as_ref() {
NumType::Unit(unit) => unit.clone(),
_ => OpUnitInnerType::new(OpUnit::new(Some(self.clone()), None, Operation::Single)),
}
}
}