pub struct InstanceNode {
pub id: NodeId,
pub element_type: String,
pub props: IndexMap<String, Value>,
pub raw_props: Props,
pub element_template: Option<Arc<Element>>,
pub ir_node_template: Option<Arc<IRNode>>,
pub control_flow: Option<ControlFlowKind>,
pub key: Option<String>,
pub parent: Option<NodeId>,
pub children: Vector<NodeId>,
}Expand description
Instance node - a concrete instance of an element in the tree
Uses im::Vector for children to enable O(1) structural sharing during clones. This is critical for reconciliation performance where nodes are frequently cloned.
Fields§
§id: NodeIdUnique node ID
element_type: StringElement type (e.g., “Column”, “Text”, “__ForEach”, “__Conditional”)
props: IndexMap<String, Value>Resolved props (bindings evaluated to actual values)
raw_props: PropsRaw props (including bindings) for change detection - Arc-wrapped for O(1) clone
element_template: Option<Arc<Element>>Original element template (for List re-rendering) - legacy Only populated for List elements that need to re-render children Arc-wrapped for O(1) clone during reconciliation
ir_node_template: Option<Arc<IRNode>>Original IRNode template (for ForEach/Conditional re-rendering) Used for control flow nodes that need to re-render on state change Arc-wrapped for O(1) clone during reconciliation
control_flow: Option<ControlFlowKind>Control flow metadata for ForEach/Conditional nodes
key: Option<String>Optional key for reconciliation
parent: Option<NodeId>Parent node ID
children: Vector<NodeId>Child node IDs (ordered) - uses im::Vector for O(1) clone
Implementations§
Source§impl InstanceNode
impl InstanceNode
pub fn new(id: NodeId, element: &Element, state: &Value) -> Self
pub fn new_full( id: NodeId, element: &Element, state: &Value, data_sources: Option<&IndexMap<String, Value>>, ) -> Self
Sourcepub fn new_control_flow(
id: NodeId,
element_type: &str,
props: IndexMap<String, Value>,
raw_props: Props,
control_flow: ControlFlowKind,
ir_node_template: IRNode,
) -> Self
pub fn new_control_flow( id: NodeId, element_type: &str, props: IndexMap<String, Value>, raw_props: Props, control_flow: ControlFlowKind, ir_node_template: IRNode, ) -> Self
Create a control flow container node (ForEach or Conditional)
Sourcepub fn update_props(&mut self, state: &Value)
pub fn update_props(&mut self, state: &Value)
Update props by re-evaluating bindings against new state
Sourcepub fn update_props_with_data_sources(
&mut self,
state: &Value,
data_sources: Option<&IndexMap<String, Value>>,
)
pub fn update_props_with_data_sources( &mut self, state: &Value, data_sources: Option<&IndexMap<String, Value>>, )
Update props by re-evaluating bindings against state and data sources
Sourcepub fn is_foreach(&self) -> bool
pub fn is_foreach(&self) -> bool
Check if this is a ForEach control flow node
Sourcepub fn is_conditional(&self) -> bool
pub fn is_conditional(&self) -> bool
Check if this is a Conditional control flow node
Trait Implementations§
Source§impl Clone for InstanceNode
impl Clone for InstanceNode
Source§fn clone(&self) -> InstanceNode
fn clone(&self) -> InstanceNode
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreAuto Trait Implementations§
impl Freeze for InstanceNode
impl RefUnwindSafe for InstanceNode
impl Send for InstanceNode
impl Sync for InstanceNode
impl Unpin for InstanceNode
impl UnsafeUnpin for InstanceNode
impl UnwindSafe for InstanceNode
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> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<T> Erasable for T
impl<T> Erasable 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<T> Paint for Twhere
T: ?Sized,
impl<T> Paint for Twhere
T: ?Sized,
Source§fn fg(&self, value: Color) -> Painted<&T>
fn fg(&self, value: Color) -> Painted<&T>
Returns a styled value derived from self with the foreground set to
value.
This method should be used rarely. Instead, prefer to use color-specific
builder methods like red() and
green(), which have the same functionality but are
pithier.
§Example
Set foreground color to white using fg():
use yansi::{Paint, Color};
painted.fg(Color::White);Set foreground color to white using white().
use yansi::Paint;
painted.white();Source§fn bright_black(&self) -> Painted<&T>
fn bright_black(&self) -> Painted<&T>
Source§fn bright_red(&self) -> Painted<&T>
fn bright_red(&self) -> Painted<&T>
Source§fn bright_green(&self) -> Painted<&T>
fn bright_green(&self) -> Painted<&T>
Source§fn bright_yellow(&self) -> Painted<&T>
fn bright_yellow(&self) -> Painted<&T>
Source§fn bright_blue(&self) -> Painted<&T>
fn bright_blue(&self) -> Painted<&T>
Source§fn bright_magenta(&self) -> Painted<&T>
fn bright_magenta(&self) -> Painted<&T>
Source§fn bright_cyan(&self) -> Painted<&T>
fn bright_cyan(&self) -> Painted<&T>
Source§fn bright_white(&self) -> Painted<&T>
fn bright_white(&self) -> Painted<&T>
Source§fn bg(&self, value: Color) -> Painted<&T>
fn bg(&self, value: Color) -> Painted<&T>
Returns a styled value derived from self with the background set to
value.
This method should be used rarely. Instead, prefer to use color-specific
builder methods like on_red() and
on_green(), which have the same functionality but
are pithier.
§Example
Set background color to red using fg():
use yansi::{Paint, Color};
painted.bg(Color::Red);Set background color to red using on_red().
use yansi::Paint;
painted.on_red();Source§fn on_primary(&self) -> Painted<&T>
fn on_primary(&self) -> Painted<&T>
Source§fn on_magenta(&self) -> Painted<&T>
fn on_magenta(&self) -> Painted<&T>
Source§fn on_bright_black(&self) -> Painted<&T>
fn on_bright_black(&self) -> Painted<&T>
Source§fn on_bright_red(&self) -> Painted<&T>
fn on_bright_red(&self) -> Painted<&T>
Source§fn on_bright_green(&self) -> Painted<&T>
fn on_bright_green(&self) -> Painted<&T>
Source§fn on_bright_yellow(&self) -> Painted<&T>
fn on_bright_yellow(&self) -> Painted<&T>
Source§fn on_bright_blue(&self) -> Painted<&T>
fn on_bright_blue(&self) -> Painted<&T>
Source§fn on_bright_magenta(&self) -> Painted<&T>
fn on_bright_magenta(&self) -> Painted<&T>
Source§fn on_bright_cyan(&self) -> Painted<&T>
fn on_bright_cyan(&self) -> Painted<&T>
Source§fn on_bright_white(&self) -> Painted<&T>
fn on_bright_white(&self) -> Painted<&T>
Source§fn attr(&self, value: Attribute) -> Painted<&T>
fn attr(&self, value: Attribute) -> Painted<&T>
Enables the styling Attribute value.
This method should be used rarely. Instead, prefer to use
attribute-specific builder methods like bold() and
underline(), which have the same functionality
but are pithier.
§Example
Make text bold using attr():
use yansi::{Paint, Attribute};
painted.attr(Attribute::Bold);Make text bold using using bold().
use yansi::Paint;
painted.bold();Source§fn rapid_blink(&self) -> Painted<&T>
fn rapid_blink(&self) -> Painted<&T>
Source§fn quirk(&self, value: Quirk) -> Painted<&T>
fn quirk(&self, value: Quirk) -> Painted<&T>
Enables the yansi Quirk value.
This method should be used rarely. Instead, prefer to use quirk-specific
builder methods like mask() and
wrap(), which have the same functionality but are
pithier.
§Example
Enable wrapping using .quirk():
use yansi::{Paint, Quirk};
painted.quirk(Quirk::Wrap);Enable wrapping using wrap().
use yansi::Paint;
painted.wrap();Source§fn clear(&self) -> Painted<&T>
👎Deprecated since 1.0.1: renamed to resetting() due to conflicts with Vec::clear().
The clear() method will be removed in a future release.
fn clear(&self) -> Painted<&T>
resetting() due to conflicts with Vec::clear().
The clear() method will be removed in a future release.Source§fn whenever(&self, value: Condition) -> Painted<&T>
fn whenever(&self, value: Condition) -> Painted<&T>
Conditionally enable styling based on whether the Condition value
applies. Replaces any previous condition.
See the crate level docs for more details.
§Example
Enable styling painted only when both stdout and stderr are TTYs:
use yansi::{Paint, Condition};
painted.red().on_yellow().whenever(Condition::STDOUTERR_ARE_TTY);