use docs_native_crdt::Editor; use serde_json::json; fn main() { let arguments: Vec<_> = std::env::args().collect(); let mut editor = Editor::new("native-wire-fixture", 123456); editor.command(&json!({"op":"insert_element","at":0,"type":"paragraph"})).unwrap(); let block = editor.projection()["children"][0]["id"].as_str().unwrap().to_owned(); editor.command(&json!({"op":"insert_text","node":block,"at":0,"text":"Native 😀 text"})).unwrap(); let text = editor.projection()["children"][0]["children"][0]["id"].as_str().unwrap().to_owned(); editor.command(&json!({"op":"format","node":text,"at":7,"length":2,"marks":{"strong":{},"size_18":{}}})).unwrap(); std::fs::write(&arguments[1], editor.snapshot()).unwrap(); if let Some(path) = arguments.get(2) { editor.apply(&std::fs::read(path).unwrap()).unwrap(); let projection = editor.projection(); let runs = projection["children"][0]["children"][0]["runs"].as_array().unwrap(); let text: String = runs.iter().map(|run| run["insert"].as_str().unwrap()).collect(); assert_eq!(text, "browser Native 😀 text"); let emoji = runs.iter().find(|run| run["insert"] == "😀").unwrap(); assert_eq!(emoji["marks"]["strong"], json!({})); assert_eq!(emoji["marks"]["size_18"], json!({})); } }