use arbitrary::Arbitrary; use std::io::Read; use flate2::read::GzDecoder; use serde_json::Value; #[derive(Arbitrary)] pub struct TextAction { pub pos: usize, pub ins: String, pub del: usize, } pub fn get_automerge_actions() -> Vec { const RAW_DATA: &[u8; 901823] = include_bytes!("./automerge-paper.json.gz"); let mut actions = Vec::new(); let mut d = GzDecoder::new(&RAW_DATA[..]); let mut s = String::new(); d.read_to_string(&mut s).unwrap(); let json: Value = serde_json::from_str(&s).unwrap(); let txns = json.as_object().unwrap().get("txns"); for txn in txns.unwrap().as_array().unwrap() { let patches = txn .as_object() .unwrap() .get("patches") .unwrap() .as_array() .unwrap(); for patch in patches { let pos = patch[0].as_u64().unwrap() as usize; let del_here = patch[1].as_u64().unwrap() as usize; let ins_content = patch[2].as_str().unwrap(); actions.push(TextAction { pos, ins: ins_content.to_string(), del: del_here, }); } } actions }