1use std::{error::Error, sync::Arc};
2
3use yrs::{updates::decoder::Decode, ReadTxn, Transact, Update};
4use yrs_tree::{NodeApi, Tree};
5
6fn main() -> Result<(), Box<dyn Error>> {
7 let doc1 = Arc::new(yrs::Doc::new());
8 let doc2 = Arc::new(yrs::Doc::new());
9
10 let tree1 = Tree::new(doc1.clone(), "test")?;
11 let tree2 = Tree::new(doc2.clone(), "test")?;
12
13 let node1 = tree1.create_child_with_id("1")?;
14 let node2 = tree1.create_child_with_id("2")?;
15 let node3 = node1.create_child_with_id("3")?;
16 let node4 = node2.create_child_with_id("4")?;
17 node3.move_to(&node2, Some(0))?;
18 node1.move_after(&node2)?;
19 node4.move_before(&node3)?;
20
21 println!("Tree 1: \n{}", tree1);
22 println!("Syncing Yjs documents...\n");
23
24 let txn = doc1.transact();
25 let update = txn.encode_state_as_update_v1(&Default::default());
26 drop(txn);
27
28 doc2.transact_mut()
29 .apply_update(Update::decode_v1(&update).unwrap())?;
30
31 println!("Tree 2: \n{}", tree2);
32
33 Ok(())
34}