From 9d48e5df88131d31c7154f588103c90df414ff94 Mon Sep 17 00:00:00 2001 From: Zixuan Chen Date: Mon, 31 Oct 2022 12:33:44 +0800 Subject: [PATCH] refactor: fix type error --- .vscode/settings.json | 2 +- crates/loro-core/src/container/manager.rs | 10 +--------- crates/loro-core/src/container/map/tests.rs | 12 +++++------- crates/loro-core/src/error.rs | 8 -------- crates/loro-core/src/fuzz.rs | 14 +++++++------- crates/loro-core/src/loro.rs | 4 ++-- crates/loro-core/tests/test.rs | 8 ++++---- crates/loro-wasm/deno_test/test.ts | 4 ++++ crates/loro-wasm/src/lib.rs | 4 ++-- 9 files changed, 26 insertions(+), 40 deletions(-) diff --git a/.vscode/settings.json b/.vscode/settings.json index 1bc59811..e1bb10fb 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -1,5 +1,5 @@ { - "cSpell.words": ["smstring", "yspan"], + "cSpell.words": ["smstring", "thiserror", "yspan"], "rust-analyzer.runnableEnv": { "RUST_BACKTRACE": "full" }, diff --git a/crates/loro-core/src/container/manager.rs b/crates/loro-core/src/container/manager.rs index 0e6b0376..4d7bd860 100644 --- a/crates/loro-core/src/container/manager.rs +++ b/crates/loro-core/src/container/manager.rs @@ -136,15 +136,7 @@ impl ContainerManager { } let container = self.get_mut(id).unwrap(); - if container.type_() != id.container_type() { - Err(LoroError::ContainerTypeError { - id: id.clone(), - actual_type: container.type_(), - expected_type: id.container_type(), - }) - } else { - Ok(container) - } + Ok(container) } } diff --git a/crates/loro-core/src/container/map/tests.rs b/crates/loro-core/src/container/map/tests.rs index 161ff090..0fe4663e 100644 --- a/crates/loro-core/src/container/map/tests.rs +++ b/crates/loro-core/src/container/map/tests.rs @@ -6,9 +6,9 @@ use fxhash::FxHashMap; use proptest::prelude::*; use proptest::proptest; -use crate::container::Container; use crate::isomorph::Irc; use crate::value::proptest::gen_insert_value; +use crate::Container; use crate::{fx_map, value::InsertValue, LoroCore, LoroValue}; @@ -16,9 +16,8 @@ use crate::{fx_map, value::InsertValue, LoroCore, LoroValue}; fn basic() { let mut loro = LoroCore::default(); let weak = Irc::downgrade(&loro.log_store); - let mut a = loro.get_map_container("map".into()); - let container = a.as_mut(); - container.insert("haha".into(), InsertValue::Int32(1), weak); + let mut container = loro.get_or_create_root_map("map".into()).unwrap(); + container.insert("haha".into(), InsertValue::Int32(1)); let ans = fx_map!( "haha".into() => LoroValue::Integer(1) ); @@ -39,12 +38,11 @@ mod map_proptest { ) { let mut loro = LoroCore::default(); let weak = Irc::downgrade(&loro.log_store); - let mut a = loro.get_map_container("map".into()); - let container = a.as_mut(); + let mut container = loro.get_or_create_root_map("map".into()).unwrap(); let mut map: HashMap = HashMap::new(); for (k, v) in key.iter().zip(value.iter()) { map.insert(k.clone(), v.clone()); - container.insert(k.clone().into(), v.clone(), weak.clone()); + container.insert(k.clone().into(), v.clone()); let snapshot = container.get_value(); for (key, value) in snapshot.as_map().unwrap().iter() { assert_eq!(map.get(&key.to_string()).map(|x|x.clone().into()), Some(value.clone())); diff --git a/crates/loro-core/src/error.rs b/crates/loro-core/src/error.rs index 19cec0a1..c0d81e1e 100644 --- a/crates/loro-core/src/error.rs +++ b/crates/loro-core/src/error.rs @@ -1,15 +1,7 @@ use thiserror::Error; -use crate::{container::ContainerID, ContainerType}; - #[derive(Error, Debug)] pub enum LoroError { - #[error("Expect container with the id of {id:?} has type {expected_type:?} but the actual type is {actual_type:?}.")] - ContainerTypeError { - id: ContainerID, - actual_type: ContainerType, - expected_type: ContainerType, - }, // #[error("the data for key `{0}` is not available")] // Redaction(String), // #[error("invalid header (expected {expected:?}, found {found:?})")] diff --git a/crates/loro-core/src/fuzz.rs b/crates/loro-core/src/fuzz.rs index ae9560ac..f052d531 100644 --- a/crates/loro-core/src/fuzz.rs +++ b/crates/loro-core/src/fuzz.rs @@ -177,13 +177,13 @@ impl Actionable for Vec { match action { Action::Ins { content, pos, site } => { self[*site as usize] - .get_or_create_text_container("text".into()) + .get_or_create_root_text("text".into()) .unwrap() .insert(*pos, content); } Action::Del { pos, len, site } => { self[*site as usize] - .get_or_create_text_container("text".into()) + .get_or_create_root_text("text".into()) .unwrap() .delete(*pos, *len); } @@ -201,7 +201,7 @@ impl Actionable for Vec { Action::Ins { pos, site, .. } => { *site %= self.len() as u8; let mut text = self[*site as usize] - .get_or_create_text_container("text".into()) + .get_or_create_root_text("text".into()) .unwrap(); let value = text.get_value().as_string().unwrap(); *pos %= value.len() + 1; @@ -212,7 +212,7 @@ impl Actionable for Vec { Action::Del { pos, len, site } => { *site %= self.len() as u8; let mut text = self[*site as usize] - .get_or_create_text_container("text".into()) + .get_or_create_root_text("text".into()) .unwrap(); if text.text_len() == 0 { *len = 0; @@ -241,8 +241,8 @@ impl Actionable for Vec { } fn check_eq(site_a: &mut LoroCore, site_b: &mut LoroCore) { - let mut a = site_a.get_or_create_text_container("text".into()).unwrap(); - let mut b = site_b.get_or_create_text_container("text".into()).unwrap(); + let mut a = site_a.get_or_create_root_text("text".into()).unwrap(); + let mut b = site_b.get_or_create_root_text("text".into()).unwrap(); let value_a = a.get_value(); let value_b = b.get_value(); assert_eq!(value_a.as_string().unwrap(), value_b.as_string().unwrap()); @@ -265,7 +265,7 @@ fn check_synced(sites: &mut [LoroCore]) { pub fn test_single_client(mut actions: Vec) { let mut store = LoroCore::new(Default::default(), Some(1)); - let mut text_container = store.get_or_create_text_container("haha".into()).unwrap(); + let mut text_container = store.get_or_create_root_text("haha".into()).unwrap(); let mut ground_truth = String::new(); let mut applied = Vec::new(); for action in actions diff --git a/crates/loro-core/src/loro.rs b/crates/loro-core/src/loro.rs index 0b5137c3..3b2f6076 100644 --- a/crates/loro-core/src/loro.rs +++ b/crates/loro-core/src/loro.rs @@ -45,7 +45,7 @@ impl LoroCore { } #[inline(always)] - pub fn get_or_create_map_container( + pub fn get_or_create_root_map( &mut self, name: &str, ) -> Result, LoroError> { @@ -60,7 +60,7 @@ impl LoroCore { } #[inline(always)] - pub fn get_or_create_text_container( + pub fn get_or_create_root_text( &mut self, name: &str, ) -> Result, LoroError> { diff --git a/crates/loro-core/tests/test.rs b/crates/loro-core/tests/test.rs index d4981854..54e58ad2 100644 --- a/crates/loro-core/tests/test.rs +++ b/crates/loro-core/tests/test.rs @@ -5,7 +5,7 @@ use loro_core::LoroCore; #[test] fn test() { let mut store = LoroCore::new(Default::default(), Some(10)); - let mut text_container = store.get_or_create_text_container("haha".into()); + let mut text_container = store.get_or_create_root_text("haha").unwrap(); text_container.insert(0, "012"); text_container.insert(1, "34"); text_container.insert(1, "56"); @@ -17,7 +17,7 @@ fn test() { let mut store_b = LoroCore::new(Default::default(), Some(11)); let exported = store.export(Default::default()); store_b.import(exported); - let mut text_container = store_b.get_or_create_text_container("haha".into()); + let mut text_container = store_b.get_or_create_root_text("haha").unwrap(); text_container.check(); let value = text_container.get_value(); let value = value.as_string().unwrap(); @@ -31,7 +31,7 @@ fn test() { drop(text_container); store.import(store_b.export(store.vv())); - let mut text_container = store.get_or_create_text_container("haha".into()); + let mut text_container = store.get_or_create_root_text("haha".into()).unwrap(); let value = text_container.get_value(); let value = value.as_string().unwrap(); assert_eq!(value.as_str(), "63417892"); @@ -43,7 +43,7 @@ fn test() { drop(text_container); store_b.import(store.export(Default::default())); - let mut text_container = store_b.get_or_create_text_container("haha".into()); + let mut text_container = store_b.get_or_create_root_text("haha".into()).unwrap(); text_container.check(); let value = text_container.get_value(); let value = value.as_string().unwrap(); diff --git a/crates/loro-wasm/deno_test/test.ts b/crates/loro-wasm/deno_test/test.ts index 720a57a4..06062151 100644 --- a/crates/loro-wasm/deno_test/test.ts +++ b/crates/loro-wasm/deno_test/test.ts @@ -8,3 +8,7 @@ a.insert(0, "hello world"); a.delete(6, 5); a.insert(6, "everyone"); console.log(a.get_value()); +const b = loro.get_map_container("ha"); +b.set("ab", 123); +console.log(b.get_value()); +console.log(a.get_value()); diff --git a/crates/loro-wasm/src/lib.rs b/crates/loro-wasm/src/lib.rs index 5aa43a7a..dd4125e0 100644 --- a/crates/loro-wasm/src/lib.rs +++ b/crates/loro-wasm/src/lib.rs @@ -38,7 +38,7 @@ impl Loro { pub fn get_text_container(&mut self, name: &str) -> Result { let mut loro = self.loro.borrow_mut(); - let text_container = loro.get_or_create_text_container(name)?; + let text_container = loro.get_or_create_root_text(name)?; Ok(Text { id: text_container.id().clone(), loro: Rc::downgrade(&self.loro), @@ -47,7 +47,7 @@ impl Loro { pub fn get_map_container(&mut self, name: &str) -> Result { let mut loro = self.loro.borrow_mut(); - let map = loro.get_or_create_map_container(name)?; + let map = loro.get_or_create_root_map(name)?; Ok(Map { id: map.id().clone(), loro: Rc::downgrade(&self.loro),