#[non_exhaustive]pub enum RuleFormula {
Condition(RuleCondition),
And(Box<RuleFormula>, Box<RuleFormula>),
Or(Box<RuleFormula>, Box<RuleFormula>),
Not(Box<RuleFormula>),
}Expand description
A typed boolean rule formula tree.
Formula nodes compose typed conditions directly. They are not serialized through an instruction stream and they do not require a runtime reducer.
§Examples
use vyre_libs::rule::{RuleCondition, RuleFormula};
let formula = RuleFormula::and(
RuleFormula::condition(RuleCondition::PatternExists { pattern_id: 0 }),
RuleFormula::not(RuleFormula::condition(RuleCondition::LiteralFalse)),
);
let program = formula.to_program().expect("Fix: formula lowers");
assert!(program.has_buffer("verdicts"));Variants (Non-exhaustive)§
This enum is marked as non-exhaustive
Non-exhaustive enums could have additional variants added in future. Therefore, when matching against variants of non-exhaustive enums, an extra wildcard arm must be added to account for any future variants.
Condition(RuleCondition)
Leaf condition.
And(Box<RuleFormula>, Box<RuleFormula>)
Logical conjunction.
Or(Box<RuleFormula>, Box<RuleFormula>)
Logical disjunction.
Not(Box<RuleFormula>)
Logical negation.
Implementations§
Source§impl RuleFormula
impl RuleFormula
Sourcepub fn condition(condition: RuleCondition) -> Self
pub fn condition(condition: RuleCondition) -> Self
Create a leaf formula.
Sourcepub fn not_formula(formula: Self) -> Self
pub fn not_formula(formula: Self) -> Self
Create a negation.
Sourcepub fn to_program(&self) -> Result<Program, RuleBuildError>
pub fn to_program(&self) -> Result<Program, RuleBuildError>
Build a one-rule Program that stores the formula verdict at index 0.
§Errors
Returns builder::RuleBuildError when the formula contains a
condition the core builder cannot lower truthfully.
§Examples
use vyre_libs::rule::{RuleCondition, RuleFormula};
let program = RuleFormula::condition(RuleCondition::LiteralTrue)
.to_program()
.expect("Fix: literal rule lowers");
assert!(program.has_buffer("rule_bitmaps"));
assert!(program.has_buffer("verdicts"));Sourcepub fn try_to_program(&self) -> Result<Program, RuleBuildError>
pub fn try_to_program(&self) -> Result<Program, RuleBuildError>
Try to build a one-rule Program that stores the formula verdict at
index 0.
§Errors
Returns builder::RuleBuildError when the formula contains a
condition the core builder cannot lower truthfully.
Trait Implementations§
Source§impl Clone for RuleFormula
impl Clone for RuleFormula
Source§fn clone(&self) -> RuleFormula
fn clone(&self) -> RuleFormula
Returns a duplicate of the value. Read more
1.0.0 (const: unstable) · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
Performs copy-assignment from
source. Read moreSource§impl Debug for RuleFormula
impl Debug for RuleFormula
impl Eq for RuleFormula
Source§impl PartialEq for RuleFormula
impl PartialEq for RuleFormula
impl StructuralPartialEq for RuleFormula
Auto Trait Implementations§
impl !RefUnwindSafe for RuleFormula
impl !UnwindSafe for RuleFormula
impl Freeze for RuleFormula
impl Send for RuleFormula
impl Sync for RuleFormula
impl Unpin for RuleFormula
impl UnsafeUnpin for RuleFormula
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
Source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
Source§fn equivalent(&self, key: &K) -> bool
fn equivalent(&self, key: &K) -> bool
Compare self to
key and return true if they are equal.Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
Source§fn in_current_span(self) -> Instrumented<Self> ⓘ
fn in_current_span(self) -> Instrumented<Self> ⓘ
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
Converts
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
Converts
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read more