pub struct PublishedSnapshot { /* private fields */ }Expand description
Single-writer multi-reader cell holding the current
DocumentSnapshot. The actor stores; everyone else loads.
Backed by arc_swap::ArcSwap, an RCU-flavored primitive:
load is wait-free (~2ns), store is a single atomic
release-store; reclamation is by refcount drop on the last
Arc<DocumentSnapshot> reader. Per DESIGN.md §5.6.8 these
semantics are not fungible – the renderer’s correctness model
depends on them.
Implementations§
Source§impl PublishedSnapshot
impl PublishedSnapshot
Sourcepub fn new(initial: DocumentSnapshot) -> Self
pub fn new(initial: DocumentSnapshot) -> Self
M.2.b.1 (2026-05-31): promoted from pub(crate) so
external Document impls (MultibufferDocumentHandle in
lattice-multibuffer, future plugin-defined kinds) can
publish their own composed snapshots. The publish
discipline still applies — every impl is responsible
for “publish-after-mutate” ordering against its own
readers. The actor model in this crate enforces that
discipline through the message loop; multibuffer enforces
it through its own internal serialisation.
Sourcepub fn cell_arc(&self) -> Arc<ArcSwap<DocumentSnapshot>> ⓘ
pub fn cell_arc(&self) -> Arc<ArcSwap<DocumentSnapshot>> ⓘ
Borrowed handle to the shared Arc<ArcSwap<...>>. Used by
SnapshotCache::new to share the underlying cell with a
per-thread reader cache. Promoted from pub(crate) for
the same reason as Self::new — external impls need to
hand the cell to SnapshotCache::new for their own
snapshot_cache() trait method.
Sourcepub fn load(&self) -> Arc<DocumentSnapshot> ⓘ
pub fn load(&self) -> Arc<DocumentSnapshot> ⓘ
Wait-free read. Returns an Arc<DocumentSnapshot> that lives
as long as the caller needs it. Renderers call this once per
visible document per frame.
Sourcepub fn store(&self, next: DocumentSnapshot)
pub fn store(&self, next: DocumentSnapshot)
Replace the published snapshot with next. Atomic; any
reader that observes the new pointer also observes all writes
the publisher ordered before the store. Promoted from
pub(crate) so external Document impls publish their
own snapshots; the actor model in this crate is no longer
the only writer.