Struct Engine

Source
pub struct Engine<Ctx: MaybeSync + ?Sized + 'static> { /* private fields */ }
Expand description

Rules engine for registering fetchers/operators and parsing rules.

§Type Parameters

  • Ctx: The context type that rules will be evaluated against

§Example

struct User {
    name: String,
    age: u32,
    roles: Vec<String>,
}

let mut engine = Engine::new();

engine.register_fetcher("name", |user: &User, _args| {
    Ok(Value::from(&user.name))
});

engine.register_fetcher("age", |user: &User, _args| {
    Ok(Value::from(user.age))
});

engine.register_fetcher("has_role", |user: &User, args| {
    let role = args.first().ok_or("Role name required")?;
    Ok(Value::from(user.roles.contains(&role)))
});

let rule = engine.compile_rule(&json!([
    {"age": {">=": 18}},
    {"has_role(admin)": true}
])).unwrap();

Implementations§

Source§

impl<Ctx: MaybeSync + ?Sized> Engine<Ctx>

Source

pub fn new() -> Self

Creates a new rules engine instance.

Source

pub fn register_fetcher( &mut self, name: &str, func: FetcherFn<Ctx>, ) -> &mut Fetcher<Ctx>

Registers a synchronous fetcher with its name and function, using the default matcher.

A fetcher is a function that extracts values from the context type. The fetcher name is used in rule definitions to reference this fetcher. By default, the DefaultMatcher is used, which supports basic equality and comparison operations.

§Returns

A mutable reference to the created Fetcher, allowing you to customize it (e.g., change the matcher)

Source

pub fn register_async_fetcher( &mut self, name: &str, func: AsyncFetcherFn<Ctx>, ) -> &mut Fetcher<Ctx>

Registers an async fetcher with its name and function, using the default matcher.

See Self::register_fetcher for more details.

Source

pub fn register_operator<O>(&mut self, name: &str, op: O)
where O: ToOperator<Ctx> + 'static,

Registers a custom operator

Source

pub fn compile_rule(&self, value: &JsonValue) -> Result<Rule<Ctx>, Error>

Compiles a JSON value into a Rule::All using the registered fetchers and operators.

Source

pub fn validate_rule<'a>( &self, value: &'a JsonValue, ) -> StdResult<(), ValidationError<'a>>

Available on crate feature validation only.

Validates a JSON rule against dynamically generated JSON Schema of this engine.

Source

pub fn json_schema(&self) -> JsonValue

Builds a JSON Schema for rules, including dynamic properties.

Trait Implementations§

Source§

impl<Ctx: MaybeSync + ?Sized> Clone for Engine<Ctx>

Source§

fn clone(&self) -> Self

Returns a copy of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl<Ctx: MaybeSync + ?Sized> Default for Engine<Ctx>

Source§

fn default() -> Self

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

Auto Trait Implementations§

§

impl<Ctx> Freeze for Engine<Ctx>
where Ctx: ?Sized,

§

impl<Ctx> !RefUnwindSafe for Engine<Ctx>

§

impl<Ctx> !Send for Engine<Ctx>

§

impl<Ctx> !Sync for Engine<Ctx>

§

impl<Ctx> Unpin for Engine<Ctx>
where Ctx: ?Sized,

§

impl<Ctx> !UnwindSafe for Engine<Ctx>

Blanket Implementations§

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

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> Instrument for T

Source§

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

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

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> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
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.
Source§

impl<T> WithSubscriber for T

Source§

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

fn with_current_subscriber(self) -> WithDispatch<Self>

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

impl<T> ErasedDestructor for T
where T: 'static,