pub struct Text(/* private fields */);
Expand description
A shared data type used for collaborative text editing. It enables multiple users to add and
remove chunks of text in efficient manner. This type is internally represented as a mutable
double-linked list of text chunks - an optimization occurs during YTransaction.commit
, which
allows to squash multiple consecutively inserted characters together as a single chunk of text
even between transaction boundaries in order to preserve more efficient memory model.
YText
structure internally uses UTF-8 encoding and its length is described in a number of
bytes rather than individual characters (a single UTF-8 code point can consist of many bytes).
Like all Yrs shared data types, YText
is resistant to the problem of interleaving (situation
when characters inserted one after another may interleave with other peers concurrent inserts
after merging all updates together). In case of Yrs conflict resolution is solved by using
unique document id to determine correct and consistent ordering.
Implementations§
source§impl YText
impl YText
sourcepub fn new(init: Option<String>) -> Self
pub fn new(init: Option<String>) -> Self
Creates a new preliminary instance of a YText
shared data type, with its state initialized
to provided parameter.
Preliminary instances can be nested into other shared data types such as YArray
and YMap
.
Once a preliminary instance has been inserted this way, it becomes integrated into ywasm
document store and cannot be nested again: attempt to do so will result in an exception.
pub fn get_type(&self) -> u8
sourcepub fn id(&self) -> Result<JsValue, JsValue>
pub fn id(&self) -> Result<JsValue, JsValue>
Gets unique logical identifier of this type, shared across peers collaborating on the same document.
sourcepub fn prelim(&self) -> bool
pub fn prelim(&self) -> bool
Returns true if this is a preliminary instance of YArray
.
Preliminary instances can be nested into other shared data types such as YArray
and YMap
.
Once a preliminary instance has been inserted this way, it becomes integrated into ywasm
document store and cannot be nested again: attempt to do so will result in an exception.
sourcepub fn alive(&self, txn: &YTransaction) -> bool
pub fn alive(&self, txn: &YTransaction) -> bool
Checks if current YArray reference is alive and has not been deleted by its parent collection. This method only works on already integrated shared types and will return false is current type is preliminary (has not been integrated into document).
sourcepub fn length(&self, txn: &ImplicitTransaction) -> Result<u32, JsValue>
pub fn length(&self, txn: &ImplicitTransaction) -> Result<u32, JsValue>
Returns length of an underlying string stored in this YText
instance,
understood as a number of UTF-8 encoded bytes.
sourcepub fn to_string(&self, txn: &ImplicitTransaction) -> Result<String, JsValue>
pub fn to_string(&self, txn: &ImplicitTransaction) -> Result<String, JsValue>
Returns an underlying shared string stored in this data type.
sourcepub fn to_json(&self, txn: &ImplicitTransaction) -> Result<JsValue, JsValue>
pub fn to_json(&self, txn: &ImplicitTransaction) -> Result<JsValue, JsValue>
Returns an underlying shared string stored in this data type.
sourcepub fn insert(
&mut self,
index: u32,
chunk: &str,
attributes: JsValue,
txn: ImplicitTransaction
) -> Result<(), JsValue>
pub fn insert( &mut self, index: u32, chunk: &str, attributes: JsValue, txn: ImplicitTransaction ) -> Result<(), JsValue>
Inserts a given chunk
of text into this YText
instance, starting at a given index
.
Optional object with defined attributes
will be used to wrap provided text chunk
with a formatting blocks.attributes
are only supported for a YText
instance which
already has been integrated into document store.
sourcepub fn insert_embed(
&self,
index: u32,
embed: JsValue,
attributes: JsValue,
txn: ImplicitTransaction
) -> Result<(), JsValue>
pub fn insert_embed( &self, index: u32, embed: JsValue, attributes: JsValue, txn: ImplicitTransaction ) -> Result<(), JsValue>
Inserts a given embed
object into this YText
instance, starting at a given index
.
Optional object with defined attributes
will be used to wrap provided embed
with a formatting blocks.attributes
are only supported for a YText
instance which
already has been integrated into document store.
sourcepub fn format(
&self,
index: u32,
length: u32,
attributes: JsValue,
txn: ImplicitTransaction
) -> Result<(), JsValue>
pub fn format( &self, index: u32, length: u32, attributes: JsValue, txn: ImplicitTransaction ) -> Result<(), JsValue>
Wraps an existing piece of text within a range described by index
-length
parameters with
formatting blocks containing provided attributes
metadata. This method only works for
YText
instances that already have been integrated into document store.
sourcepub fn push(
&mut self,
chunk: &str,
attributes: JsValue,
txn: ImplicitTransaction
) -> Result<(), JsValue>
pub fn push( &mut self, chunk: &str, attributes: JsValue, txn: ImplicitTransaction ) -> Result<(), JsValue>
Appends a given chunk
of text at the end of current YText
instance.
Optional object with defined attributes
will be used to wrap provided text chunk
with a formatting blocks.attributes
are only supported for a YText
instance which
already has been integrated into document store.
sourcepub fn delete(
&mut self,
index: u32,
length: u32,
txn: ImplicitTransaction
) -> Result<(), JsValue>
pub fn delete( &mut self, index: u32, length: u32, txn: ImplicitTransaction ) -> Result<(), JsValue>
Deletes a specified range of of characters, starting at a given index
.
Both index
and length
are counted in terms of a number of UTF-8 character bytes.
pub fn quote( &self, lower: u32, upper: u32, lower_open: Option<bool>, upper_open: Option<bool>, txn: &ImplicitTransaction ) -> Result<YWeakLink, JsValue>
sourcepub fn to_delta(
&self,
snapshot: Option<YSnapshot>,
prev_snapshot: Option<YSnapshot>,
compute_ychange: Option<Function>,
txn: ImplicitTransaction
) -> Result<Array, JsValue>
pub fn to_delta( &self, snapshot: Option<YSnapshot>, prev_snapshot: Option<YSnapshot>, compute_ychange: Option<Function>, txn: ImplicitTransaction ) -> Result<Array, JsValue>
Returns the Delta representation of this YText type.
sourcepub fn observe(&self, f: Function) -> Result<Observer, JsValue>
pub fn observe(&self, f: Function) -> Result<Observer, JsValue>
Subscribes to all operations happening over this instance of YText
. All changes are
batched and eventually triggered during transaction commit phase.
Returns an YTextObserver
which, when free’d, will unsubscribe current callback.
sourcepub fn observe_deep(&self, f: Function) -> Result<Observer, JsValue>
pub fn observe_deep(&self, f: Function) -> Result<Observer, JsValue>
Subscribes to all operations happening over this Y shared type, as well as events in
shared types stored within this one. All changes are batched and eventually triggered
during transaction commit phase.
Returns an YEventObserver
which, when free’d, will unsubscribe current callback.
Trait Implementations§
source§impl FromWasmAbi for YText
impl FromWasmAbi for YText
source§impl IntoWasmAbi for YText
impl IntoWasmAbi for YText
source§impl LongRefFromWasmAbi for YText
impl LongRefFromWasmAbi for YText
source§impl OptionFromWasmAbi for YText
impl OptionFromWasmAbi for YText
source§impl OptionIntoWasmAbi for YText
impl OptionIntoWasmAbi for YText
source§impl RefFromWasmAbi for YText
impl RefFromWasmAbi for YText
source§impl RefMutFromWasmAbi for YText
impl RefMutFromWasmAbi for YText
source§impl TryFromJsValue for YText
impl TryFromJsValue for YText
source§impl VectorFromWasmAbi for YText
impl VectorFromWasmAbi for YText
source§impl VectorIntoWasmAbi for YText
impl VectorIntoWasmAbi for YText
Auto Trait Implementations§
impl Freeze for YText
impl !RefUnwindSafe for YText
impl !Send for YText
impl !Sync for YText
impl Unpin for YText
impl !UnwindSafe for YText
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
source§impl<T> ReturnWasmAbi for Twhere
T: IntoWasmAbi,
impl<T> ReturnWasmAbi for Twhere
T: IntoWasmAbi,
§type Abi = <T as IntoWasmAbi>::Abi
type Abi = <T as IntoWasmAbi>::Abi
IntoWasmAbi::Abi
source§fn return_abi(self) -> <T as ReturnWasmAbi>::Abi
fn return_abi(self) -> <T as ReturnWasmAbi>::Abi
IntoWasmAbi::into_abi
, except that it may throw and never
return in the case of Err
.