Struct yrs::TransactionMut
source · pub struct TransactionMut<'doc> { /* private fields */ }
Expand description
Read-write transaction. It can be used to modify an underlying state of the corresponding Doc. Read-write transactions require an exclusive access to document store - only one such transaction can be present per Doc at the same time (read-only Transactions are not allowed to coexists at the same time as well).
This transaction type stores the information about all of the changes performed in its scope. These will be used during TransactionMut::commit call to optimize metadata of incoming updates, triggering necessary event callbacks etc. For performance reasons it’s preferred to batch as many updates as possible using the same transaction.
In Yrs transactions are always auto-committing all of their changes when dropped. Rollbacks are not supported (if some operations needs to be undone, this can be achieved using UndoManager)
Implementations§
source§impl<'doc> TransactionMut<'doc>
impl<'doc> TransactionMut<'doc>
pub fn doc(&self) -> &Doc
sourcepub fn before_state(&self) -> &StateVector
pub fn before_state(&self) -> &StateVector
Corresponding document’s state vector at the moment when current transaction was created.
sourcepub fn after_state(&self) -> &StateVector
pub fn after_state(&self) -> &StateVector
State vector of the transaction after [Transaction::commit] has been called.
sourcepub fn delete_set(&self) -> &DeleteSet
pub fn delete_set(&self) -> &DeleteSet
Data about deletions performed in the scope of current transaction.
sourcepub fn origin(&self) -> Option<&Origin>
pub fn origin(&self) -> Option<&Origin>
Returns origin of the transaction if any was defined. Read-write transactions can get an origin assigned via Transact::try_transact_mut_with/Transact::transact_mut_with methods.
sourcepub fn changed_parent_types(&self) -> &[BranchPtr]
pub fn changed_parent_types(&self) -> &[BranchPtr]
Returns a list of root level types changed in a scope of the current transaction. This list is not filled right away, but as a part of TransactionMut::commit process.
sourcepub fn encode_update_v1(&self) -> Vec<u8> ⓘ
pub fn encode_update_v1(&self) -> Vec<u8> ⓘ
Encodes changes made within the scope of the current transaction using lib0 v1 encoding.
Document updates are idempotent and commutative. Caveats:
- It doesn’t matter in which order document updates are applied.
- As long as all clients receive the same document updates, all clients end up with the same content.
- Even if an update contains known information, the unknown information is extracted and integrated into the document structure.
sourcepub fn encode_update_v2(&self) -> Vec<u8> ⓘ
pub fn encode_update_v2(&self) -> Vec<u8> ⓘ
Encodes changes made within the scope of the current transaction using lib0 v2 encoding.
Document updates are idempotent and commutative. Caveats:
- It doesn’t matter in which order document updates are applied.
- As long as all clients receive the same document updates, all clients end up with the same content.
- Even if an update contains known information, the unknown information is extracted and integrated into the document structure.
sourcepub fn encode_update<E: Encoder>(&self, encoder: &mut E)
pub fn encode_update<E: Encoder>(&self, encoder: &mut E)
Encodes changes made within the scope of the current transaction.
Document updates are idempotent and commutative. Caveats:
- It doesn’t matter in which order document updates are applied.
- As long as all clients receive the same document updates, all clients end up with the same content.
- Even if an update contains known information, the unknown information is extracted and integrated into the document structure.
sourcepub fn apply_update(&mut self, update: Update)
pub fn apply_update(&mut self, update: Update)
Applies a deserialized Update contents into a document owning current transaction. Update payload can be generated by methods such as TransactionMut::encode_diff or passed to Doc::observe_update_v1/Doc::observe_update_v2 callbacks. Updates are allowed to contain duplicate blocks (already presen in current document store) - these will be ignored.
§Pending updates
Remote update integration requires that all to-be-integrated blocks must have their direct predecessors already in place. Out of order updates from the same peer will be stashed internally and their integration will be postponed until missing blocks arrive first.
sourcepub fn commit(&mut self)
pub fn commit(&mut self)
Commits current transaction. This step involves cleaning up and optimizing changes performed during lifetime of a transaction. Such changes include squashing delete sets data, squashing blocks that have been appended one after another to preserve memory and triggering events.
This step is performed automatically when a transaction is about to be dropped (its life scope comes to an end).
Trait Implementations§
source§impl<'doc> Drop for TransactionMut<'doc>
impl<'doc> Drop for TransactionMut<'doc>
source§impl<'doc> ReadTxn for TransactionMut<'doc>
impl<'doc> ReadTxn for TransactionMut<'doc>
fn store(&self) -> &Store
source§fn state_vector(&self) -> StateVector
fn state_vector(&self) -> StateVector
source§fn snapshot(&self) -> Snapshot
fn snapshot(&self) -> Snapshot
source§fn encode_state_from_snapshot<E: Encoder>(
&self,
snapshot: &Snapshot,
encoder: &mut E
) -> Result<(), Error>
fn encode_state_from_snapshot<E: Encoder>( &self, snapshot: &Snapshot, encoder: &mut E ) -> Result<(), Error>
snapshot
.
This enables to encode state of a document at some specific point in the past.source§fn encode_diff<E: Encoder>(&self, state_vector: &StateVector, encoder: &mut E)
fn encode_diff<E: Encoder>(&self, state_vector: &StateVector, encoder: &mut E)
state_vector
and the state
of a current local peerfn encode_diff_v1(&self, state_vector: &StateVector) -> Vec<u8> ⓘ
fn encode_diff_v2(&self, state_vector: &StateVector) -> Vec<u8> ⓘ
fn encode_state_as_update<E: Encoder>(&self, sv: &StateVector, encoder: &mut E)
fn encode_state_as_update_v1(&self, sv: &StateVector) -> Vec<u8> ⓘ
fn encode_state_as_update_v2(&self, sv: &StateVector) -> Vec<u8> ⓘ
source§fn is_alive<B>(&self, node: &B) -> boolwhere
B: SharedRef,
fn is_alive<B>(&self, node: &B) -> boolwhere
B: SharedRef,
source§fn root_refs(&self) -> RootRefs<'_> ⓘ
fn root_refs(&self) -> RootRefs<'_> ⓘ
source§fn subdoc_guids(&self) -> SubdocGuids<'_>
fn subdoc_guids(&self) -> SubdocGuids<'_>
source§fn subdocs(&self) -> SubdocsIter<'_>
fn subdocs(&self) -> SubdocsIter<'_>
source§fn get_map<N: Into<Arc<str>>>(&self, name: N) -> Option<MapRef>
fn get_map<N: Into<Arc<str>>>(&self, name: N) -> Option<MapRef>
name
. Maps are used to store key-value
pairs associated. These values can be primitive data (similar but not limited to
a JavaScript Object Notation) as well as other shared types (Yrs maps, arrays, text
structures etc.), enabling to construct a complex recursive tree structures. Read moresource§fn get_xml_fragment<N: Into<Arc<str>>>(&self, name: N) -> Option<XmlFragmentRef>
fn get_xml_fragment<N: Into<Arc<str>>>(&self, name: N) -> Option<XmlFragmentRef>
name
. XML elements represent
nodes of XML document. They can contain attributes (key-value pairs, both of string type)
and other nested XML elements or text values, which are stored in their insertion
order. Read moresource§impl<'doc> WriteTxn for TransactionMut<'doc>
impl<'doc> WriteTxn for TransactionMut<'doc>
fn store_mut(&mut self) -> &mut Store
fn subdocs_mut(&mut self) -> &mut Subdocs
source§fn get_or_insert_map<N: Into<Arc<str>>>(&mut self, name: N) -> MapRef
fn get_or_insert_map<N: Into<Arc<str>>>(&mut self, name: N) -> MapRef
name
. Maps are used to store key-value
pairs associated. These values can be primitive data (similar but not limited to
a JavaScript Object Notation) as well as other shared types (Yrs maps, arrays, text
structures etc.), enabling to construct a complex recursive tree structures. Read moresource§fn get_or_insert_xml_fragment<N: Into<Arc<str>>>(
&mut self,
name: N
) -> XmlFragmentRef
fn get_or_insert_xml_fragment<N: Into<Arc<str>>>( &mut self, name: N ) -> XmlFragmentRef
name
. XML elements represent
nodes of XML document. They can contain attributes (key-value pairs, both of string type)
as well as other nested XML elements or text values, which are stored in their insertion
order. Read more