pub struct LoroTree { /* private fields */ }
Expand description
LoroTree container. It’s used to model movable trees.
You may use it to model directories, outline or other movable hierarchical data.
Implementations§
source§impl LoroTree
impl LoroTree
sourcepub fn new() -> Self
pub fn new() -> Self
Create a new container that is detached from the document.
The edits on a detached container will not be persisted. To attach the container to the document, please insert it into an attached container.
sourcepub fn is_attached(&self) -> bool
pub fn is_attached(&self) -> bool
Whether the container is attached to a document
The edits on a detached container will not be persisted. To attach the container to the document, please insert it into an attached container.
sourcepub fn create<T: Into<Option<TreeID>>>(&self, parent: T) -> LoroResult<TreeID>
pub fn create<T: Into<Option<TreeID>>>(&self, parent: T) -> LoroResult<TreeID>
Create a new tree node and return the TreeID
.
If the parent
is None
, the created node is the root of a tree.
Otherwise, the created node is a child of the parent tree node.
§Example
use loro::LoroDoc;
let doc = LoroDoc::new();
let tree = doc.get_tree("tree");
// create a root
let root = tree.create(None).unwrap();
// create a new child
let child = tree.create(root).unwrap();
sourcepub fn create_at<T: Into<Option<TreeID>>>(
&self,
parent: T,
index: usize
) -> LoroResult<TreeID>
pub fn create_at<T: Into<Option<TreeID>>>( &self, parent: T, index: usize ) -> LoroResult<TreeID>
Create a new tree node at the given index and return the TreeID
.
If the parent
is None
, the created node is the root of a tree.
If the index
is greater than the number of children of the parent, error will be returned.
§Example
use loro::LoroDoc;
let doc = LoroDoc::new();
let tree = doc.get_tree("tree");
// create a root
let root = tree.create(None).unwrap();
// create a new child at index 0
let child = tree.create_at(root, 0).unwrap();
sourcepub fn mov<T: Into<Option<TreeID>>>(
&self,
target: TreeID,
parent: T
) -> LoroResult<()>
pub fn mov<T: Into<Option<TreeID>>>( &self, target: TreeID, parent: T ) -> LoroResult<()>
Move the target
node to be a child of the parent
node.
If the parent
is None
, the target
node will be a root.
§Example
use loro::LoroDoc;
let doc = LoroDoc::new();
let tree = doc.get_tree("tree");
let root = tree.create(None).unwrap();
let root2 = tree.create(None).unwrap();
// move `root2` to be a child of `root`.
tree.mov(root2, root).unwrap();
sourcepub fn mov_to<T: Into<Option<TreeID>>>(
&self,
target: TreeID,
parent: T,
to: usize
) -> LoroResult<()>
pub fn mov_to<T: Into<Option<TreeID>>>( &self, target: TreeID, parent: T, to: usize ) -> LoroResult<()>
Move the target
node to be a child of the parent
node at the given index.
If the parent
is None
, the target
node will be a root.
§Example
use loro::LoroDoc;
let doc = LoroDoc::new();
let tree = doc.get_tree("tree");
let root = tree.create(None).unwrap();
let root2 = tree.create(None).unwrap();
// move `root2` to be a child of `root` at index 0.
tree.mov_to(root2, root, 0).unwrap();
sourcepub fn mov_after(&self, target: TreeID, after: TreeID) -> LoroResult<()>
pub fn mov_after(&self, target: TreeID, after: TreeID) -> LoroResult<()>
Move the target
node to be a child after the after
node with the same parent.
§Example
use loro::LoroDoc;
let doc = LoroDoc::new();
let tree = doc.get_tree("tree");
let root = tree.create(None).unwrap();
let root2 = tree.create(None).unwrap();
// move `root` to be a child after `root2`.
tree.mov_after(root, root2).unwrap();
sourcepub fn mov_before(&self, target: TreeID, before: TreeID) -> LoroResult<()>
pub fn mov_before(&self, target: TreeID, before: TreeID) -> LoroResult<()>
Move the target
node to be a child before the before
node with the same parent.
§Example
use loro::LoroDoc;
let doc = LoroDoc::new();
let tree = doc.get_tree("tree");
let root = tree.create(None).unwrap();
let root2 = tree.create(None).unwrap();
// move `root` to be a child before `root2`.
tree.mov_before(root, root2).unwrap();
sourcepub fn delete(&self, target: TreeID) -> LoroResult<()>
pub fn delete(&self, target: TreeID) -> LoroResult<()>
Delete a tree node.
Note: If the deleted node has children, the children do not appear in the state rather than actually being deleted.
§Example
use loro::LoroDoc;
let doc = LoroDoc::new();
let tree = doc.get_tree("tree");
let root = tree.create(None).unwrap();
tree.delete(root).unwrap();
sourcepub fn get_meta(&self, target: TreeID) -> LoroResult<LoroMap>
pub fn get_meta(&self, target: TreeID) -> LoroResult<LoroMap>
Get the associated metadata map handler of a tree node.
§Example
use loro::LoroDoc;
let doc = LoroDoc::new();
let tree = doc.get_tree("tree");
let root = tree.create(None).unwrap();
let root_meta = tree.get_meta(root).unwrap();
root_meta.insert("color", "red");
sourcepub fn parent(&self, target: &TreeID) -> Option<Option<TreeID>>
pub fn parent(&self, target: &TreeID) -> Option<Option<TreeID>>
Return the parent of target node.
- If the target node does not exist, return
None
. - If the target node is a root node, return
Some(None)
.
sourcepub fn children(&self, parent: Option<TreeID>) -> Vec<TreeID>
pub fn children(&self, parent: Option<TreeID>) -> Vec<TreeID>
Return all children of the target node.
sourcepub fn children_num(&self, parent: Option<TreeID>) -> Option<usize>
pub fn children_num(&self, parent: Option<TreeID>) -> Option<usize>
Return the number of children of the target node.
sourcepub fn id(&self) -> ContainerID
pub fn id(&self) -> ContainerID
Return container id of the tree.
sourcepub fn fractional_index(&self, target: &TreeID) -> Option<String>
pub fn fractional_index(&self, target: &TreeID) -> Option<String>
Return the fractional index of the target node with hex format.
sourcepub fn get_value(&self) -> LoroValue
pub fn get_value(&self) -> LoroValue
Return the flat array of the forest.
Note: the metadata will be not resolved. So if you don’t only care about hierarchy but also the metadata, you should use [TreeHandler::get_value_with_meta()].
sourcepub fn get_value_with_meta(&self) -> LoroValue
pub fn get_value_with_meta(&self) -> LoroValue
Return the flat array of the forest, each node is with metadata.
Trait Implementations§
source§impl ContainerTrait for LoroTree
impl ContainerTrait for LoroTree
§type Handler = TreeHandler
type Handler = TreeHandler
source§fn to_container(&self) -> Container
fn to_container(&self) -> Container
source§fn to_handler(&self) -> Self::Handler
fn to_handler(&self) -> Self::Handler
source§fn from_handler(handler: Self::Handler) -> Self
fn from_handler(handler: Self::Handler) -> Self
source§fn is_attached(&self) -> bool
fn is_attached(&self) -> bool
source§fn get_attached(&self) -> Option<Self>
fn get_attached(&self) -> Option<Self>
source§fn try_from_container(container: Container) -> Option<Self>
fn try_from_container(container: Container) -> Option<Self>
Auto Trait Implementations§
impl Freeze for LoroTree
impl RefUnwindSafe for LoroTree
impl Send for LoroTree
impl Sync for LoroTree
impl Unpin for LoroTree
impl UnwindSafe for LoroTree
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> Instrument for T
impl<T> Instrument for T
source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
source§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