Skip to main content

RuleEngine

Struct RuleEngine 

Source
pub struct RuleEngine { /* private fields */ }
Expand description

Rule engine for evaluating rule-based constraints against live Quins.

Internally owns a SlgArena (the 42MB Webizen VM) into which parsed N3 rules are registered and fired. The evaluate method matches an input Quin against the conclusions asserted by fired rules, returning real pass/fail verdicts.

Implementations§

Source§

impl RuleEngine

Source

pub fn new() -> Self

Create a new rule engine with an empty arena.

Source

pub fn with_contract(contract_hash: u64) -> Self

Create a new rule engine bound to a specific contract graph hash.

The contract hash is used when compiling N3 rules to deontic norms — it becomes the context field of the compiled norm Quin.

Source

pub fn add_ruleset(&mut self, ruleset: RuleSet)

Add a pre-built ruleset to the engine and fire its rules in the VM.

Source

pub fn load_n3(&mut self, name: &str, n3_source: &str) -> usize

Load an N3 source string as a new ruleset, parse it, register and fire the rules in the internal VM arena.

Returns the number of rules parsed and fired.

Source

pub fn get_ruleset(&self, name: &str) -> Option<&RuleSet>

Get a ruleset by name.

Source

pub fn evaluate(&self, quin: &NQuin) -> Vec<RuleResult>

Evaluate all rulesets against a Quin by checking whether the Quin matches the premise pattern of any fired rule (norm) in the arena.

After fire_registered_rules, the arena contains deontic norms derived from rule premises. Each norm’s predicate encodes the property path (shifted left 8 bits) and a deontic opcode in the low byte. This method extracts the property path and checks whether the input Quin’s (subject, predicate, object) matches any norm’s premise pattern.

Each evaluation emits a q42:ruleEvaluation WAL audit event. Returns one RuleResult per rule across all rulesets.

Source

pub fn evaluate_silent(&self, quin: &NQuin) -> Vec<RuleResult>

Evaluate without WAL logging (for hot paths or testing).

Collects active norms from the arena, extracts each norm’s premise pattern (subject, property_path, object), and checks whether the input Quin matches. A rule “passes” when its norm’s premise pattern matches the input Quin — meaning the rule fires for this input.

Source

pub fn ruleset_count(&self) -> usize

Number of rulesets loaded.

Source

pub fn rule_count(&self) -> usize

Total number of rules across all rulesets.

Source

pub fn arena_rule_count(&self) -> usize

Number of rules currently registered in the VM arena.

Trait Implementations§

Source§

impl Default for RuleEngine

Source§

fn default() -> Self

Returns the “default value” for a type. Read more

Auto Trait Implementations§

Blanket Implementations§

§

impl<S, A> Aggregate<Result<S, Error>> for A
where A: Aggregate<S>,

§

fn from_shares<T>(iter: T) -> Result<A, Error>
where T: IntoIterator<Item = Result<S, Error>>,

Aggregate shares in an MPC protocol.
Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
§

impl<T> Downcast<T> for T

§

fn downcast(&self) -> &T

Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> IntoEither for T

Source§

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 more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where F: FnOnce(&Self) -> bool,

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
§

impl<T> NoneValue for T
where T: Default,

§

type NoneType = T

§

fn null_value() -> T

The none-equivalent value.
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
§

impl<T> PolicyExt for T
where T: ?Sized,

§

fn and<P, B, E>(self, other: P) -> And<T, P>
where T: Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns [Action::Follow] only if self and other return Action::Follow. Read more
§

fn or<P, B, E>(self, other: P) -> Or<T, P>
where T: Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns [Action::Follow] if either self or other returns Action::Follow. Read more
Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<T> Upcast<T> for T

§

fn upcast(&self) -> Option<&T>

§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a [WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a [WithDispatch] wrapper. Read more
§

impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
where ST: ?Sized, DT: ?Sized,

§

impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
where ST: ?Sized, DT: ?Sized,

§

impl<T> Read<Exclusive, BecauseExclusive> for T
where T: ?Sized,

§

impl<T> WasmNotSend for T
where T: Send,

§

impl<T> WasmNotSendSync for T
where T: WasmNotSend + WasmNotSync,

§

impl<T> WasmNotSync for T
where T: Sync,