pub struct Tree { /* private fields */ }Expand description
Retained tree store. Holds the current root node (if any) and supports full replacement (snapshot) and incremental patch application.
Maintains an internal id_index mapping each node ID to the
child-index path that addresses it from the root. The index is
rebuilt on every snapshot and after every apply_patch call so
find_by_id is O(path-depth) instead of O(tree-size). Empty IDs
(legal for unaddressable nodes) are not indexed; under duplicate
IDs the first depth-first occurrence wins, matching the recursive
scan it replaces.
Implementations§
Source§impl Tree
impl Tree
pub fn new() -> Self
Sourcepub fn snapshot(&mut self, root: TreeNode) -> Result<(), Vec<String>>
pub fn snapshot(&mut self, root: TreeNode) -> Result<(), Vec<String>>
Replace the entire tree with a new root (snapshot).
The tree is always accepted (the renderer needs UI even if the tree
has problems). Returns Ok(()) if all node IDs are unique, or
Err with a list of "id (type_name)" strings for each duplicate.
The caller should emit a protocol error so the host can fix the bug.
Sourcepub fn root_mut(&mut self) -> Option<&mut TreeNode>
pub fn root_mut(&mut self) -> Option<&mut TreeNode>
Return a mutable reference to the current root, if any. Used
by transforms that drive the shared tree_walk walker, which
takes &mut TreeNode even for read-only passes.
Sourcepub fn find_window(&self, window_id: &str) -> Option<&TreeNode>
pub fn find_window(&self, window_id: &str) -> Option<&TreeNode>
Find a window node by its window ID, searching the entire tree recursively.
Sourcepub fn window_ids(&self) -> Vec<String>
pub fn window_ids(&self) -> Vec<String>
Collect the IDs of all window nodes in the tree (recursive search).
Sourcepub fn find_by_id(&self, node_id: &str) -> Option<&TreeNode>
pub fn find_by_id(&self, node_id: &str) -> Option<&TreeNode>
Find a node by ID. Goes through the id_index for O(depth)
lookup instead of a full depth-first scan.
Sourcepub fn find_by_type(&self, node_id: &str) -> Option<&str>
pub fn find_by_type(&self, node_id: &str) -> Option<&str>
Returns the type name of the node with the given ID, if found.
Sourcepub fn validate_patch_order(ops: &[PatchOp]) -> Result<(), String>
pub fn validate_patch_order(ops: &[PatchOp]) -> Result<(), String>
Validate protocol ordering for a sequence of patch operations.
The wire protocol orders structural ops so indices stay meaningful: removes first, updates/replacements next, inserts last. Removes and inserts are ordered only within the same parent path.
Sourcepub fn apply_patch(
&mut self,
ops: Vec<PatchOp>,
) -> Vec<(String, usize, TreeNode)>
pub fn apply_patch( &mut self, ops: Vec<PatchOp>, ) -> Vec<(String, usize, TreeNode)>
Apply a sequence of patch operations to the tree.
The caller is responsible for validating protocol ordering before applying renderer-owned patch sequences. Operations are applied sequentially. If one operation fails, it is skipped with a warning and subsequent operations are still applied. This preserves existing best-effort handling for malformed or stale individual ops. Applies patch operations and returns any removed nodes that had an “exit” prop (for exit animation ghost promotion).
Trait Implementations§
Auto Trait Implementations§
impl Freeze for Tree
impl RefUnwindSafe for Tree
impl Send for Tree
impl Sync for Tree
impl Unpin for Tree
impl UnsafeUnpin for Tree
impl UnwindSafe for Tree
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> Downcast for Twhere
T: Any,
impl<T> Downcast for Twhere
T: Any,
Source§fn into_any(self: Box<T>) -> Box<dyn Any>
fn into_any(self: Box<T>) -> Box<dyn Any>
Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can
then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.Source§fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be
further downcast into Rc<ConcreteType> where ConcreteType implements Trait.Source§fn as_any(&self) -> &(dyn Any + 'static)
fn as_any(&self) -> &(dyn Any + 'static)
&Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &Any’s vtable from &Trait’s.Source§fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
&mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &mut Any’s vtable from &mut Trait’s.Source§impl<T> DowncastSync for T
impl<T> DowncastSync for T
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
Source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<State, Message> IntoBoot<State, Message> for State
impl<State, Message> IntoBoot<State, Message> for State
Source§fn into_boot(self) -> (State, Task<Message>)
fn into_boot(self) -> (State, Task<Message>)
Application.