1use std::{error::Error, sync::Arc};
2
3use yrs_tree::{NodeApi, Tree, TreeEvent};
4
5fn main() -> Result<(), Box<dyn Error>> {
6 let doc = Arc::new(yrs::Doc::new());
7 let tree = Tree::new(doc.clone(), "test")?;
8
9 let _sub = tree.on_change(|e| match e {
10 TreeEvent::TreeUpdated(tree) => {
11 println!("{}", tree);
12 }
13 TreeEvent::TreePoisoned(_tree, err) => {
14 println!("Tree is poisoned: {}", err);
15 }
16 });
17
18 println!("Add 1 to ROOT");
19 let node1 = tree.create_child_with_id("1")?;
20 println!("Add 2 to ROOT");
21 let node2 = tree.create_child_with_id("2")?;
22 println!("Add 3 to 1");
23 let node3 = node1.create_child_with_id("3")?;
24 println!("Add 4 to 2");
25 let node4 = node2.create_child_with_id("4")?;
26
27 println!("Move 3 to 2, index 0");
28 node3.move_to(&node2, Some(0))?;
29
30 println!("Move 1 after 2");
31 node1.move_after(&node2)?;
32
33 println!("Move 4 before 3");
34 node4.move_before(&node3)?;
35
36 println!("Set data on 1: my_key = my_value");
37 node1.set("my_key", "my_value")?;
38
39 let val = node1.get_as::<String>("my_key")?;
40 println!("Get data from 1: my_key = {}", val);
41
42 Ok(())
43}