Skip to main content

Engine

Struct Engine 

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

Engine for evaluating Lemma rules.

Pure Rust implementation that evaluates Lemma specs directly from the AST. Uses pre-built execution plans that are self-contained and ready for evaluation.

The engine never performs network calls. External @... references must be pre-resolved before loading — either by including dependency sources in the source map or by calling resolve_registry_references separately (e.g. in a lemma fetch command).

Implementations§

Source§

impl Engine

Source

pub fn new() -> Self

Source

pub fn with_limits(limits: ResourceLimits) -> Self

Source

pub fn load( &mut self, code: impl Into<String>, source: SourceType, ) -> Result<(), Errors>

Load one Lemma source (workspace; not a tagged dependency).

Source

pub fn load_batch( &mut self, sources: HashMap<SourceType, String>, dependency: Option<&str>, ) -> Result<(), Errors>

Load many sources in one planning pass. Pairs are (source_text, source_id).

dependency: when Some, repositories parsed from these sources are tagged with that id (same as previous load(..., Some(id)) for path bundles).

Source

pub fn get_spec( &self, name: &str, effective: Option<&DateTimeValue>, ) -> Result<Arc<LemmaSpec>, Error>

Active LemmaSpec slice for name at the resolved effective instant.

When effective is None, uses the current time. The name must be unique across loaded repositories at that instant (same rule as Self::get_plan with repo: None). For repository scope or all temporal rows, use Self::get_workspace or Self::get_repository.

Source

pub fn list(&self) -> Vec<ResolvedRepository>

Every loaded repository in insertion order (includes workspace and dependencies).

Each ResolvedRepository::repository and every LemmaSpec under ResolvedRepository::specs includes source metadata (start_line, source_type) from load.

Source

pub fn get_workspace(&self) -> ResolvedRepository

Workspace-local repository (name == None).

Source

pub fn get_repository( &self, qualifier: &str, ) -> Result<ResolvedRepository, Error>

Resolve a loaded repository by qualifier string. Matches against repository names (which include @ when present).

Source

pub fn schema( &self, repo: Option<&str>, spec: &str, effective: Option<&DateTimeValue>, ) -> Result<SpecSchema, Error>

Planning schema for name. When repo is None, the spec must be unambiguous across all loaded repositories; when Some, scoped to that repository qualifier (e.g. "@org/pkg").

Source

pub fn run( &self, repo: Option<&str>, spec: &str, effective: Option<&DateTimeValue>, data_values: HashMap<String, String>, record_operations: bool, ) -> Result<Response, Error>

Evaluate a spec. When repo is None, the spec must be unambiguous across loaded repositories; when Some, scoped to that repository qualifier (e.g. "@org/pkg").

Source

pub fn invert( &self, name: &str, effective: Option<&DateTimeValue>, rule_name: &str, target: Target, values: HashMap<String, String>, ) -> Result<InversionResponse, Error>

Invert a rule to find input domains that produce a desired outcome.

Values are provided as name -> value string pairs (e.g., “quantity” -> “5”). They are automatically parsed to the expected type based on the spec schema.

Source

pub fn get_plan( &self, repo: Option<&str>, name: &str, effective: Option<&DateTimeValue>, ) -> Result<&ExecutionPlan, Error>

Execution plan for name. When repo is None, the spec must be unambiguous across all loaded repositories; when Some, scoped to that repository qualifier (e.g. "@org/pkg").

Source

pub fn run_plan( &self, plan: &ExecutionPlan, effective: Option<&DateTimeValue>, data_values: HashMap<String, String>, record_operations: bool, ) -> Result<Response, Error>

Run a plan from [get_plan]: apply data values and evaluate all rules.

When record_operations is true, each rule’s [RuleResult::operations] will contain a trace of data used, rules used, computations, and branch evaluations.

Source

pub fn run_plan_without_defaults( &self, plan: &ExecutionPlan, effective: Option<&DateTimeValue>, data_values: HashMap<String, String>, record_operations: bool, ) -> Result<Response, Error>

Evaluate after [ExecutionPlan::set_data_values] without [ExecutionPlan::with_defaults]. Defaults stay suggestions; interactive and inversion use this path.

Source

pub fn remove( &mut self, name: &str, effective: Option<&DateTimeValue>, ) -> Result<(), Error>

Trait Implementations§

Source§

impl Default for Engine

Source§

fn default() -> Self

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

Auto Trait Implementations§

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

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

Source§

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

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, 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