Skip to main content

Tree

Struct Tree 

Source
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

Source

pub fn new() -> Self

Source

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.

Source

pub fn root(&self) -> Option<&TreeNode>

Return a reference to the current root, if any.

Source

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.

Source

pub fn find_window(&self, window_id: &str) -> Option<&TreeNode>

Find a window node by its window ID, searching the entire tree recursively.

Source

pub fn window_ids(&self) -> Vec<String>

Collect the IDs of all window nodes in the tree (recursive search).

Source

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.

Source

pub fn find_by_type(&self, node_id: &str) -> Option<&str>

Returns the type name of the node with the given ID, if found.

Source

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.

Source

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§

Source§

impl Debug for Tree

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Default for Tree

Source§

fn default() -> Tree

Returns the “default value” for a type. Read more

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> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> Downcast for T
where T: Any,

Source§

fn into_any(self: Box<T>) -> Box<dyn Any>

Convert 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>

Convert 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)

Convert &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)

Convert &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
where T: Any + Send + Sync,

Source§

fn into_any_arc(self: Arc<T>) -> Arc<dyn Any + Sync + Send>

Convert Arc<Trait> (where Trait: Downcast) to Arc<Any>. Arc<Any> can then be further downcast into Arc<ConcreteType> where ConcreteType implements Trait.
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> Instrument for T

Source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<State, Message> IntoBoot<State, Message> for State

Source§

fn into_boot(self) -> (State, Task<Message>)

Turns some type into the initial state of some Application.
Source§

impl<T> NoneValue for T
where T: Default,

Source§

type NoneType = T

Source§

fn null_value() -> T

The none-equivalent value.
Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<T> WithSubscriber for T

Source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

impl<T> MaybeClone for T

Source§

impl<T> MaybeDebug for T

Source§

impl<T> MaybeSend for T
where T: Send,

Source§

impl<T> MaybeSync for T
where T: Sync,