Struct RecordSet
pub struct RecordSet { /* private fields */ }Expand description
The records one app process has open, and which is live. Owns
per-record persistence and parking — not collaboration: routing a
record’s deltas is the toolkit’s business (tilo_ui::App re-announces its
channel on checkout), since a channel is a property of the connection.
Implementations§
§impl RecordSet
impl RecordSet
pub fn open(manifest_id: impl Into<String>) -> RecordSet
pub fn open(manifest_id: impl Into<String>) -> RecordSet
The launch-environment set: per-record documents under this package’s
state directory. The host’s package id always wins over manifest_id
(as in crate::persist::open_room) — resolving it differently here would
split a package’s records from its room index.
The process environment names the package and room, and the native
store (app_state::DocStore::native_store) holds the documents; see
Self::open_in. Hosts with an explicit profile open records through
RecordOwners instead.
The host’s workspace (else cluster) id scopes the records.
pub fn open_in(
store: Rc<dyn DurableStore>,
package_id: impl Into<String>,
home: impl Into<String>,
) -> RecordSet
pub fn open_in( store: Rc<dyn DurableStore>, package_id: impl Into<String>, home: impl Into<String>, ) -> RecordSet
The launch-environment set over an explicit store: each record is a
shared-writer document in room home, and pre-room package records
are imported into exactly one room on first open.
pub fn package_id(&self) -> &str
pub fn package_id(&self) -> &str
The package these records are stored under.
pub fn in_memory() -> RecordSet
pub fn in_memory() -> RecordSet
A set that never touches the disk. For tests, for --shots, and for
any run that must not leave state behind.
pub fn with_home(self, home: impl Into<String>) -> RecordSet
pub fn with_home(self, home: impl Into<String>) -> RecordSet
Name the room explicitly. Used by tests and by a host that opens records on behalf of a room other than its own launch environment.
pub fn open_records(&self) -> Vec<RecordCheckout>
pub fn open_records(&self) -> Vec<RecordCheckout>
Every record this process has open, checked-out one included.
pub fn known_records(&self) -> Vec<RecordCheckout>
pub fn known_records(&self) -> Vec<RecordCheckout>
The bounded, validated names currently granted by the room index.
Unlike Self::open_records, this does not imply their documents
were loaded, persisted, or joined on the collaboration transport.
pub fn discover_room(&mut self, room: &AutoCommit) -> Vec<RecordCheckout>
pub fn discover_room(&mut self, room: &AutoCommit) -> Vec<RecordCheckout>
Refresh the room-granted record names without opening any of them. A removed/tombstoned index entry disappears from future discovery, but already-open data remains in memory: revocation stops future access; it cannot un-share bytes the process has already received.
pub fn peek(&self, id: &RecordId) -> Option<&AutoCommit>
pub fn peek(&self, id: &RecordId) -> Option<&AutoCommit>
Read a parked record’s document without checking it out. None for
the record currently checked out — its document is the live one.
pub fn checkout(
&mut self,
state: &mut State,
room: Option<&mut AutoCommit>,
want: &RecordCheckout,
) -> bool
pub fn checkout( &mut self, state: &mut State, room: Option<&mut AutoCommit>, want: &RecordCheckout, ) -> bool
Switch the live document to want: the outgoing document is parked
and flushed, the incoming one loaded (or created) and referenced
into room’s index. Returns whether anything changed — checking
out the already-live record is a no-op, so a widget can declare its
record every frame.
pub fn open_record(
&mut self,
want: &RecordCheckout,
room: Option<&mut AutoCommit>,
) -> bool
pub fn open_record( &mut self, want: &RecordCheckout, room: Option<&mut AutoCommit>, ) -> bool
Open want if it is not open already, loading its document from
its own file and bringing it into room’s index. Returns whether
this opened it.
pub fn document_mut(&mut self, id: &RecordId) -> Option<&mut AutoCommit>
pub fn document_mut(&mut self, id: &RecordId) -> Option<&mut AutoCommit>
An open record’s document, for a host showing several at once.
None for a record not held here, or the one currently checked
out (the live document is the toolkit’s).
pub fn document_and_history_mut(
&mut self,
id: &RecordId,
) -> Option<(&mut AutoCommit, &mut UndoLog)>
pub fn document_and_history_mut( &mut self, id: &RecordId, ) -> Option<(&mut AutoCommit, &mut UndoLog)>
An open record’s document together with its history, so a caller driving undo can do both against the same record.
pub fn tick_open(&mut self)
pub fn tick_open(&mut self)
Offer every open record’s document to its own writer. The
multi-record twin of Self::tick, for a host with no single live
document to hand in.
pub fn flush_open(&mut self)
pub fn flush_open(&mut self)
Write out every open record and wait for it to land. The
multi-record twin of Self::flush.
pub fn tick(&mut self, live: &mut AutoCommit)
pub fn tick(&mut self, live: &mut AutoCommit)
Offer the live document to the active record’s writer. Cheap when nothing changed — a head comparison, no serialisation.
pub fn try_flush(&mut self, live: &mut AutoCommit) -> Result<(), String>
pub fn try_flush(&mut self, live: &mut AutoCommit) -> Result<(), String>
Flush active and parked records, reporting unavailable or failed writers.
§Errors
Returns record-specific persistence failures without discarding live bytes.
pub fn flush(&mut self, live: &mut AutoCommit)
pub fn flush(&mut self, live: &mut AutoCommit)
Write out everything still pending, live document included, and wait for it to land.
Auto Trait Implementations§
impl Freeze for RecordSet
impl !RefUnwindSafe for RecordSet
impl !Send for RecordSet
impl !Sync for RecordSet
impl Unpin for RecordSet
impl UnsafeUnpin for RecordSet
impl !UnwindSafe for RecordSet
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
§impl<T> Downcast for Twhere
T: Any,
impl<T> Downcast for Twhere
T: Any,
§fn into_any(self: Box<T>) -> Box<dyn Any>
fn into_any(self: Box<T>) -> Box<dyn Any>
Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can
then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.§fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be
further downcast into Rc<ConcreteType> where ConcreteType implements Trait.§fn as_any(&self) -> &(dyn Any + 'static)
fn as_any(&self) -> &(dyn Any + 'static)
&Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &Any’s vtable from &Trait’s.§fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
&mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &mut Any’s vtable from &mut Trait’s.§impl<T> Instrument for T
impl<T> Instrument for T
§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
§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