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
impl Engine
pub fn new() -> Self
pub fn with_limits(limits: ResourceLimits) -> Self
Sourcepub fn load(
&mut self,
code: impl Into<String>,
source: SourceType,
) -> Result<(), Errors>
pub fn load( &mut self, code: impl Into<String>, source: SourceType, ) -> Result<(), Errors>
Load one Lemma source (workspace; not a tagged dependency).
Sourcepub fn load_batch(
&mut self,
sources: HashMap<SourceType, String>,
dependency: Option<&str>,
) -> Result<(), Errors>
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).
Sourcepub fn get_spec(
&self,
name: &str,
effective: Option<&DateTimeValue>,
) -> Result<Arc<LemmaSpec>, Error>
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.
Sourcepub fn list(&self) -> Vec<ResolvedRepository>
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.
Sourcepub fn get_workspace(&self) -> ResolvedRepository
pub fn get_workspace(&self) -> ResolvedRepository
Workspace-local repository (name == None).
Sourcepub fn get_repository(
&self,
qualifier: &str,
) -> Result<ResolvedRepository, Error>
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).
Sourcepub fn schema(
&self,
repo: Option<&str>,
spec: &str,
effective: Option<&DateTimeValue>,
) -> Result<SpecSchema, Error>
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").
Sourcepub fn run(
&self,
repo: Option<&str>,
spec: &str,
effective: Option<&DateTimeValue>,
data_values: HashMap<String, String>,
record_operations: bool,
) -> Result<Response, Error>
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").
Sourcepub fn invert(
&self,
name: &str,
effective: Option<&DateTimeValue>,
rule_name: &str,
target: Target,
values: HashMap<String, String>,
) -> Result<InversionResponse, Error>
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.
Sourcepub fn get_plan(
&self,
repo: Option<&str>,
name: &str,
effective: Option<&DateTimeValue>,
) -> Result<&ExecutionPlan, Error>
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").
Sourcepub fn run_plan(
&self,
plan: &ExecutionPlan,
effective: Option<&DateTimeValue>,
data_values: HashMap<String, String>,
record_operations: bool,
) -> Result<Response, Error>
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.
Sourcepub fn run_plan_without_defaults(
&self,
plan: &ExecutionPlan,
effective: Option<&DateTimeValue>,
data_values: HashMap<String, String>,
record_operations: bool,
) -> Result<Response, Error>
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.
pub fn remove( &mut self, name: &str, effective: Option<&DateTimeValue>, ) -> Result<(), Error>
Trait Implementations§
Auto Trait Implementations§
impl Freeze for Engine
impl RefUnwindSafe for Engine
impl Send for Engine
impl Sync for Engine
impl Unpin for Engine
impl UnsafeUnpin for Engine
impl UnwindSafe for Engine
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
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>
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>
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