pub enum SkeletonNode {
Dispatch {
id: u16,
parent_id: Option<u16>,
child_ids: Vec<u16>,
name: String,
original_key: String,
ordering: Option<SubBranchOrdering>,
},
Aggregate {
id: u16,
parent_id: Option<u16>,
child_ids: Vec<u16>,
name: String,
original_key: String,
ordering: Option<SubBranchOrdering>,
},
LeafHolder {
id: u16,
parent_id: Option<u16>,
leaf_count: u16,
capstone: bool,
name: String,
original_key: String,
ordering: Option<SubBranchOrdering>,
},
}Expand description
A single node in our skeleton, identified by:
- id (u16)
- optional parent_id
- a mandatory name
- an optional original_key (defaults to
nameif unset) - an optional ordering (sub-branch ordering)
We store it as an enum with three variants corresponding to how sub-branches (if any) are used:
-
Dispatch: has child nodes but no leaves. Semantically, we pick exactly one branch among its children (like an enum).
-
Aggregate: has child nodes but no leaves. Semantically, we include all branches simultaneously (like a struct).
-
LeafHolder: has no child nodes but does store a
leaf_count(the number of leaves), plus acapstoneflag if relevant. No children are directly attached—only leaves.
The BFS or measurement logic can still do node.child_ids()—this returns &[] if it’s a LeafHolder
(no children) or the actual child list if it’s Dispatch or Aggregate.
Similarly, node.leaf_count() is zero for Dispatch/Aggregate and nonzero only for LeafHolder.
Variants§
Dispatch
Dispatch: no leaves, but has child nodes. Semantically we pick exactly one sub-branch at runtime.
Fields
ordering: Option<SubBranchOrdering>Sub-branch ordering approach
Aggregate
Aggregate: has children but no leaves. Semantically, we include all sub-branches simultaneously.
Fields
ordering: Option<SubBranchOrdering>Sub-branch ordering
LeafHolder
LeafHolder: no children, but does store a leaf_count plus an optional capstone.
Fields
ordering: Option<SubBranchOrdering>Ordering (not always relevant for leaves, but we keep it for uniformity)
Implementations§
Source§impl SkeletonNode
impl SkeletonNode
Sourcepub fn original_key(&self) -> &str
pub fn original_key(&self) -> &str
Getter for the original_key field.
Sourcepub fn ordering(&self) -> Option<&SubBranchOrdering>
pub fn ordering(&self) -> Option<&SubBranchOrdering>
Getter for the optional ordering field.
Sourcepub fn child_ids(&self) -> &[u16]
pub fn child_ids(&self) -> &[u16]
Getter for child_ids. Returns empty slice if variant has no children.
Sourcepub fn leaf_count(&self) -> u16
pub fn leaf_count(&self) -> u16
Getter for leaf_count. Returns 0 if not a LeafHolder.
Source§impl SkeletonNode
impl SkeletonNode
Sourcepub fn set_child_ids(&mut self, new_child_ids: Vec<u16>)
pub fn set_child_ids(&mut self, new_child_ids: Vec<u16>)
Mutate child_ids, turning this node into Dispatch if needed.
If new_child_ids is empty, we switch to LeafHolder with leaf_count=0.
Source§impl SkeletonNode
impl SkeletonNode
Sourcepub fn set_leaf_count(&mut self, new_count: u16)
pub fn set_leaf_count(&mut self, new_count: u16)
Mutate leaf_count, turning this node into LeafHolder if needed.
Trait Implementations§
Source§impl Clone for SkeletonNode
impl Clone for SkeletonNode
Source§fn clone(&self) -> SkeletonNode
fn clone(&self) -> SkeletonNode
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreSource§impl Debug for SkeletonNode
impl Debug for SkeletonNode
Source§impl Default for SkeletonNode
impl Default for SkeletonNode
Source§impl<'de> Deserialize<'de> for SkeletonNode
impl<'de> Deserialize<'de> for SkeletonNode
Source§fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
Source§impl LoadFromFile for SkeletonNodewhere
SkeletonNode: for<'de> Deserialize<'de>,
impl LoadFromFile for SkeletonNodewhere
SkeletonNode: for<'de> Deserialize<'de>,
Source§impl PartialEq for SkeletonNode
impl PartialEq for SkeletonNode
Source§impl SaveToFile for SkeletonNodewhere
SkeletonNode: Serialize,
impl SaveToFile for SkeletonNodewhere
SkeletonNode: Serialize,
Source§impl Serialize for SkeletonNode
impl Serialize for SkeletonNode
impl StructuralPartialEq for SkeletonNode
Auto Trait Implementations§
impl Freeze for SkeletonNode
impl RefUnwindSafe for SkeletonNode
impl Send for SkeletonNode
impl Sync for SkeletonNode
impl Unpin for SkeletonNode
impl UnwindSafe for SkeletonNode
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> 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<T> IntoCollection<T> for T
impl<T> IntoCollection<T> for T
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§impl<T> LoadFromDirectory for Twhere
T: LoadFromFile + Send,
<T as LoadFromFile>::Error: Display + From<SaveLoadError> + From<Error> + Send + 'static,
impl<T> LoadFromDirectory for Twhere
T: LoadFromFile + Send,
<T as LoadFromFile>::Error: Display + From<SaveLoadError> + From<Error> + Send + 'static,
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);