diff --git a/rusty/src/core/runtime.rs b/rusty/src/core/runtime.rs index 59b4074..e1ce210 100644 --- a/rusty/src/core/runtime.rs +++ b/rusty/src/core/runtime.rs @@ -39,7 +39,7 @@ impl Runtime { pub fn new(root: impl View) -> Self { let (event_tx, event_rx) = mpsc::channel(2048); let (rebuild_tx, rebuild_rx) = mpsc::channel(256); - let view_tree = ViewTree::new(Box::new(root)); + let view_tree = ViewTree::new(Arc::new(root)); Runtime { view_tree, tree: Arc::new(RwLock::new(None)), @@ -543,9 +543,9 @@ mod tests { let cleanup_called_clone = cleanup_called.clone(); // Create a view tree with a child - let mut tree = ViewTree::new(Box::new(|_ctx: &mut BuildContext| Element::Empty)); + let mut tree = ViewTree::new(Arc::new(|_ctx: &mut BuildContext| Element::Empty)); let root_id = tree.root_id(); - let child_id = tree.insert(root_id, Box::new(|_ctx: &mut BuildContext| Element::Empty)); + let child_id = tree.insert(root_id, Arc::new(|_ctx: &mut BuildContext| Element::Empty)); // Set up HookStores with an effect cleanup for the child let mut hook_stores: HashMap = HashMap::new(); diff --git a/rusty/src/core/view_tree.rs b/rusty/src/core/view_tree.rs index b0e6c6b..0508810 100644 --- a/rusty/src/core/view_tree.rs +++ b/rusty/src/core/view_tree.rs @@ -25,11 +25,11 @@ pub struct ViewTree { impl ViewTree { /// Create a new ViewTree with a root view. - pub fn new(root_view: Box) -> Self { + pub fn new(root_view: Arc) -> Self { let root_id = uuid::Uuid::new_v4(); let root_node = ViewNode { view_id: root_id, - view: Arc::from(root_view), + view: root_view, parent: None, children: Vec::new(), }; @@ -44,11 +44,11 @@ impl ViewTree { } /// Insert a child view under the given parent, returning the new child's ViewId. - pub fn insert(&mut self, parent_id: ViewId, view: Box) -> ViewId { + pub fn insert(&mut self, parent_id: ViewId, view: Arc) -> ViewId { let child_id = uuid::Uuid::new_v4(); let child_node = ViewNode { view_id: child_id, - view: Arc::from(view), + view, parent: Some(parent_id), children: Vec::new(), }; @@ -64,11 +64,11 @@ impl ViewTree { &mut self, parent_id: ViewId, child_id: ViewId, - view: Box, + view: Arc, ) -> ViewId { let child_node = ViewNode { view_id: child_id, - view: Arc::from(view), + view, parent: Some(parent_id), children: Vec::new(), }; @@ -178,11 +178,11 @@ mod tests { #[test] fn test_view_tree_insert_and_ancestors() { - let mut tree = ViewTree::new(Box::new(DummyView("root".into()))); + let mut tree = ViewTree::new(Arc::new(DummyView("root".into()))); let root = tree.root_id(); - let child = tree.insert(root, Box::new(DummyView("child".into()))); - let grandchild = tree.insert(child, Box::new(DummyView("grandchild".into()))); + let child = tree.insert(root, Arc::new(DummyView("child".into()))); + let grandchild = tree.insert(child, Arc::new(DummyView("grandchild".into()))); let ancestors = tree.ancestors(grandchild); assert_eq!(ancestors.len(), 2); @@ -195,12 +195,12 @@ mod tests { #[test] fn test_view_tree_remove_subtree() { - let mut tree = ViewTree::new(Box::new(DummyView("root".into()))); + let mut tree = ViewTree::new(Arc::new(DummyView("root".into()))); let root = tree.root_id(); - let child = tree.insert(root, Box::new(DummyView("child".into()))); - let gc1 = tree.insert(child, Box::new(DummyView("gc1".into()))); - let gc2 = tree.insert(child, Box::new(DummyView("gc2".into()))); + let child = tree.insert(root, Arc::new(DummyView("child".into()))); + let gc1 = tree.insert(child, Arc::new(DummyView("gc1".into()))); + let gc2 = tree.insert(child, Arc::new(DummyView("gc2".into()))); let removed = tree.remove(child); assert_eq!(removed.len(), 3); @@ -217,12 +217,12 @@ mod tests { #[test] fn test_view_tree_subtree_ids() { - let mut tree = ViewTree::new(Box::new(DummyView("root".into()))); + let mut tree = ViewTree::new(Arc::new(DummyView("root".into()))); let root = tree.root_id(); - let c1 = tree.insert(root, Box::new(DummyView("c1".into()))); - let c2 = tree.insert(root, Box::new(DummyView("c2".into()))); - let gc = tree.insert(c1, Box::new(DummyView("gc".into()))); + let c1 = tree.insert(root, Arc::new(DummyView("c1".into()))); + let c2 = tree.insert(root, Arc::new(DummyView("c2".into()))); + let gc = tree.insert(c1, Arc::new(DummyView("gc".into()))); let subtree = tree.subtree_ids(root); assert_eq!(subtree.len(), 4); diff --git a/rusty/src/views/view.rs b/rusty/src/views/view.rs index 786dbbc..d4e2239 100644 --- a/rusty/src/views/view.rs +++ b/rusty/src/views/view.rs @@ -159,7 +159,7 @@ pub struct EffectRecord { /// Entry for a child view registered during build via `child_view()`. pub struct ChildViewEntry { pub child_view_id: ViewId, - pub view: Box, + pub view: Arc, pub element: Element, } @@ -321,7 +321,7 @@ impl<'a> BuildContext<'a> { self.child_views.push(ChildViewEntry { child_view_id, - view: Box::new(view), + view: Arc::new(view), element: element.clone(), });