Skip to main content

lace_sans_io/
lib.rs

1//! Shared Lace protocol, policy, codec, and runtime-support substrate.
2//!
3//! This crate contains Lace's protocol and policy machinery: records, Datalog,
4//! exchange-plan lowering, interlace core state, ILTP codecs, and internal
5//! runtime-support helpers. Source authoring belongs to `lace-compiler`.
6//! Runtime crates own IO, tasks, timers, callbacks, and concrete store lifecycles.
7//!
8//! Normal applications should usually enter through a runtime crate such as
9//! `lace-rt`, `lace-tokio`, or a language binding such as `@lace/lace-js`.
10//! Those crates expose `Lace`, `LaceHandle`, `list`, `get`, `store`, `for_each`,
11//! and curated record/lifecycle events.
12//!
13//! The modules in this crate are host-integration and protocol-building surfaces.
14//! In particular, `core` contains sans-IO machines that emit store operation
15//! requests and consume runtime-supplied store responses. `runtime_support`
16//! contains narrow helper code for runtime-owned stores and transports; it is not
17//! part of `core` and does not own runtime lifecycles. Runtime crates own
18//! executable stores. Public record access in application code should go through
19//! interlace-backed runtime operations rather than direct store mutation or
20//! inspection.
21
22// Keep Unicode normalization tables aligned with spec (Unicode 17.0.0).
23use unicode_normalization::UNICODE_VERSION;
24const _: () = assert!(
25    UNICODE_VERSION.0 == 17 && UNICODE_VERSION.1 == 0 && UNICODE_VERSION.2 == 0,
26    "unicode-normalization must remain pinned to Unicode 17.0.0"
27);
28
29pub mod core;
30pub mod iltp;
31pub mod logic;
32pub mod records;
33#[doc(hidden)]
34pub mod runtime_support;
35#[doc(hidden)]
36pub mod runtime_values;
37#[cfg(test)]
38mod test_allocator;
39
40#[allow(unused_imports)]
41pub(crate) use logic::{
42    BodyAtom, InterlaceModule, LocalExecutablePolicy, RecordSnapshot, exchange_plan, lacegram,
43    parse_lacegram, policy, record_facts, text_shape, text_shape_matches, types,
44};
45#[allow(unused_imports)]
46pub(crate) use records::{blob, hash, plex, seal, typed_text, util};