sim_incremental_core/lib.rs
1#![forbid(unsafe_code)]
2#![deny(missing_docs)]
3//! Generic incremental query calculation for SIM runtime libraries.
4//!
5//! `sim-incremental-core` records dependencies from actual query execution. A
6//! query can read another query through its [`QueryFrame`], observe external
7//! stamps, and return any hashable Rust value. The engine keeps memoized values,
8//! reverse dependency edges, cycle paths, typed budget failures, continuation
9//! tokens, and bounded graph snapshots without depending on SIM expressions,
10//! codecs, Table/Dir storage, web surfaces, or expression-tree records.
11//!
12//! # Examples
13//!
14//! ```
15//! use sim_incremental_core::{IncrementalEngine, QueryResult};
16//!
17//! let mut engine = IncrementalEngine::<&'static str, i64>::new();
18//! engine.register_fn("a", |_, _| Ok(1));
19//! engine.register_fn("b", |_, frame| {
20//! let a = frame.read("a")?;
21//! Ok(a + 1)
22//! });
23//!
24//! let value: QueryResult<_, _> = engine.verify("b");
25//! assert_eq!(value.unwrap(), 2);
26//! ```
27
28mod budget;
29mod engine;
30mod error;
31mod fingerprint;
32mod observation;
33mod query;
34mod snapshot;
35mod state;
36
37pub use budget::{BudgetKind, QueryBudgets, SnapshotBudgets};
38pub use engine::{IncrementalEngine, QueryFrame};
39pub use error::{ContinuationToken, IncrementalError, SnapshotError};
40pub use fingerprint::{FingerprintValue, ValueFingerprint};
41pub use observation::{Observation, ObservationKind, Revision};
42pub use query::{Query, QueryResult};
43pub use snapshot::{GraphSnapshot, RestoreReport, SnapshotNode};
44
45#[cfg(test)]
46mod tests;