NodeTree

Struct NodeTree 

Source
pub struct NodeTree<D, T> {
    pub data: Option<D>,
    pub node: Node<T>,
}
Expand description

A hashmap-like data structure for organizing general data into recursive subnodes. Data is indexed and traversed using paths. It retains the order of insertion.

ยง๐Ÿ“ Structure

All data is stored inside inner tree-like hierarchy. Each node can store users data and multiple subnodes.

> NodeTree
 |-> Node_1
 |    |-> Node_2
 |    |-> Node_3
 |    |    |-> Node_4
 |-> Node_5
 |    |-> Node_6

ยงโš™๏ธ Paths

Paths are strings that are passed to the methods to retrive and mutate data. For example "foo/bar/bar" is a valid path syntax. You need to construct paths always from the point of view of the struct we pass them to. For example on the previous hierarchy:

If you want to access Node_4, you use path "Node_1/Node_3/Node_4" on NodeTree struct. You can also use "Node_3/Node_4" on Node_1 struct to get the same result.

Whitespaces are allowed in paths, but are not encouraged. Putting a dot as first symbol like this ".name" will hide the node from the tree. Just "." will refer to the same node. ".." is not supported and is actually a valid name.

You can also not specify the name when creating a node. That means the name will be generated. The format is as follows ".||#:N" with N being the .len() of the nodes hashmap.

ยง๐Ÿ“ฆ Types

  • Generic (D) - Master data schema struct defining what surface data can be stored in NodeTree for all nodes to share.
  • Generic (N) - Node data schema struct defining what node-specific data can be stored in Node

ยงโš ๏ธ Warning

Please refrain from manually using ".||#:0", ".||#:1", ".||#:2", โ€ฆ as names or NodeGeneralTrait::add_node will return errors.

Fieldsยง

ยงdata: Option<D>

ยงTop-level data

This top-level data is meant to be shared for every node. Example usage is storing theme and other surface data.

ยงnode: Node<T>

ยงNode

The starting root node.

Trait Implementationsยง

Sourceยง

impl<D: Clone, T: Clone> Clone for NodeTree<D, T>

Sourceยง

fn clone(&self) -> NodeTree<D, T>

Returns a duplicate of the value. Read more
1.0.0ยง

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Sourceยง

impl<D, T> Component for NodeTree<D, T>
where Self: Send + Sync + 'static,

Sourceยง

const STORAGE_TYPE: StorageType = bevy::ecs::component::StorageType::Table

A constant indicating the storage type used for this component.
Sourceยง

fn register_component_hooks(_hooks: &mut ComponentHooks)

Called when registering this component, allowing mutable access to its ComponentHooks.
Sourceยง

impl<D: Debug, T: Debug> Debug for NodeTree<D, T>

Sourceยง

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

Formats the value using the given formatter. Read more
Sourceยง

impl<D: Default, T: Default> Default for NodeTree<D, T>

Sourceยง

fn default() -> NodeTree<D, T>

Returns the โ€œdefault valueโ€ for a type. Read more
Sourceยง

impl<D, T> From<NodeTree<D, T>> for Node<T>

Sourceยง

fn from(val: NodeTree<D, T>) -> Self

Converts to this type from the input type.
Sourceยง

impl<D, T> NodeCreationTrait<T> for NodeTree<D, T>

Sourceยง

fn make_node(&mut self, name: impl Borrow<str>) -> Result<String, NodeError>

Makes new subnode in this node and returns the new subnodesโ€™ name. Read more
Sourceยง

fn create_node(&mut self, path: impl Borrow<str>) -> Result<String, NodeError>

๐Ÿšธ Recursive Read more
Sourceยง

fn obtain_or_create_node( &mut self, name: impl Borrow<str>, ) -> Result<&Node<T>, NodeError>

Borrows subnode from this node. If the node doesnโ€™t exist, it creates one. Read more
Sourceยง

fn obtain_or_create_node_mut( &mut self, name: impl Borrow<str>, ) -> Result<&mut Node<T>, NodeError>

Borrows subnode from this node as mut. If the node doesnโ€™t exist, it creates one. Read more
Sourceยง

fn borrow_or_create_node( &mut self, path: impl Borrow<str>, ) -> Result<&Node<T>, NodeError>

๐Ÿšธ Recursive Read more
Sourceยง

fn borrow_or_create_node_mut( &mut self, path: impl Borrow<str>, ) -> Result<&mut Node<T>, NodeError>

๐Ÿšธ Recursive Read more
Sourceยง

impl<D, T> NodeDataTrait<T> for NodeTree<D, T>

Sourceยง

fn add_data(&mut self, data: T) -> Option<T>

Adds new data to this node and returns the previous data. Read more
Sourceยง

fn insert_data( &mut self, path: impl Borrow<str>, data: T, ) -> Result<Option<T>, NodeError>

๐Ÿšธ Recursive Read more
Sourceยง

fn take_data(&mut self) -> Option<T>

Removes data from this node and returns them. Read more
Sourceยง

fn remove_data( &mut self, path: impl Borrow<str>, ) -> Result<Option<T>, NodeError>

๐Ÿšธ Recursive Read more
Sourceยง

fn obtain_data(&self) -> Option<&T>

Borrows data from this node. Read more
Sourceยง

fn obtain_data_mut(&mut self) -> Option<&mut T>

Borrows data from this node as mut. Read more
Sourceยง

fn borrow_data(&self, path: impl Borrow<str>) -> Result<Option<&T>, NodeError>

๐Ÿšธ Recursive Read more
Sourceยง

fn borrow_data_mut( &mut self, path: impl Borrow<str>, ) -> Result<Option<&mut T>, NodeError>

๐Ÿšธ Recursive Read more
Sourceยง

impl<D, T: NiceDisplay> NodeDisplayTrait<T> for NodeTree<D, T>

Sourceยง

fn tree(&self, params: impl Borrow<str>) -> String

Generates overview of the inner structure of subnodes as a printable string. You can supply additional parameters like show-hidden.
Sourceยง

impl<D, T> NodeGeneralTrait<T> for NodeTree<D, T>

Sourceยง

fn add_node( &mut self, name: impl Borrow<str>, node: impl Into<Node<T>>, ) -> Result<String, NodeError>

Adds new subnode to this node and returns the new subnodesโ€™ name. Read more
Sourceยง

fn insert_node( &mut self, path: impl Borrow<str>, node: impl Into<Node<T>>, ) -> Result<String, NodeError>

๐Ÿšธ Recursive Read more
Sourceยง

fn take_node(&mut self, name: impl Borrow<str>) -> Result<Node<T>, NodeError>

Removes subnode from this node and returns it. Read more
Sourceยง

fn remove_node(&mut self, path: impl Borrow<str>) -> Result<Node<T>, NodeError>

๐Ÿšธ Recursive Read more
Sourceยง

fn obtain_node(&self, name: impl Borrow<str>) -> Result<&Node<T>, NodeError>

Borrows subnode from this node. Read more
Sourceยง

fn obtain_node_mut( &mut self, name: impl Borrow<str>, ) -> Result<&mut Node<T>, NodeError>

Borrows subnode from this node as mut. Read more
Sourceยง

fn borrow_node(&self, path: impl Borrow<str>) -> Result<&Node<T>, NodeError>

๐Ÿšธ Recursive Read more
Sourceยง

fn borrow_node_mut( &mut self, path: impl Borrow<str>, ) -> Result<&mut Node<T>, NodeError>

๐Ÿšธ Recursive Read more
Sourceยง

fn merge(&mut self, node: impl Into<Node<T>>) -> Result<(), NodeError>

Merges subnodes of supplied node or nodetree into this node. Read more
Sourceยง

fn crawl(&self) -> Vec<&Node<T>>

Recursively iterates over all subnodes and returns them in a single vector.
Sourceยง

fn tree_node(&self, params: impl Borrow<str>) -> String

Generates overview of the inner structure of subnodes as a printable string. Read more
Sourceยง

fn get_name(&self) -> &String

Returns name of the node. Cached & Read-only. Read more
Sourceยง

fn get_path(&self) -> &String

Returns depth within the hierarchy. Cached & Read-only. Read more
Sourceยง

fn get_depth(&self) -> f32

Returns full path without the name. Cached & Read-only. Read more
Sourceยง

impl<D, T> NodeTopDataTrait<D> for NodeTree<D, T>

Sourceยง

fn add_topdata(&mut self, data: D) -> Option<D>

Adds new top-level data and returns previous top-level data.
Sourceยง

fn take_topdata(&mut self) -> Option<D>

Removes top-level data and returns it.
Sourceยง

fn obtain_topdata(&self) -> Option<&D>

Borrows top-level data.
Sourceยง

fn obtain_topdata_mut(&mut self) -> Option<&mut D>

Borrows top-level data as mut.
Sourceยง

impl<D, T> NodeTreeInitTrait for NodeTree<D, T>

Sourceยง

fn new(name: impl Borrow<str>) -> Self

Creates new NodeTree.
Sourceยง

impl<D: PartialEq, T: PartialEq> PartialEq for NodeTree<D, T>

Sourceยง

fn eq(&self, other: &NodeTree<D, T>) -> bool

Tests for self and other values to be equal, and is used by ==.
1.0.0ยง

fn ne(&self, other: &Rhs) -> bool

Tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
Sourceยง

impl<D, T> StructuralPartialEq for NodeTree<D, T>

Auto Trait Implementationsยง

ยง

impl<D, T> Freeze for NodeTree<D, T>
where D: Freeze, T: Freeze,

ยง

impl<D, T> RefUnwindSafe for NodeTree<D, T>

ยง

impl<D, T> Send for NodeTree<D, T>
where D: Send, T: Send,

ยง

impl<D, T> Sync for NodeTree<D, T>
where D: Sync, T: Sync,

ยง

impl<D, T> Unpin for NodeTree<D, T>
where D: Unpin, T: Unpin,

ยง

impl<D, T> UnwindSafe for NodeTree<D, T>
where D: UnwindSafe, T: UnwindSafe,

Blanket Implementationsยง

ยง

impl<T> Any for T
where T: 'static + ?Sized,

ยง

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Sourceยง

impl<T, U> AsBindGroupShaderType<U> for T
where U: ShaderType, &'a T: for<'a> Into<U>,

Sourceยง

fn as_bind_group_shader_type(&self, _images: &RenderAssets<GpuImage>) -> U

Return the T ShaderType for self. When used in AsBindGroup derives, it is safe to assume that all images in self exist.
ยง

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

ยง

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
ยง

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

ยง

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

Mutably borrows from an owned value. Read more
Sourceยง

impl<C> Bundle for C
where C: Component,

Sourceยง

fn component_ids( components: &mut Components, storages: &mut Storages, ids: &mut impl FnMut(ComponentId), )

Sourceยง

unsafe fn from_components<T, F>(ctx: &mut T, func: &mut F) -> C
where F: for<'a> FnMut(&'a mut T) -> OwningPtr<'a>,

Sourceยง

fn get_component_ids( components: &Components, ids: &mut impl FnMut(Option<ComponentId>), )

Gets this Bundleโ€™s component ids. This will be None if the component has not been registered.
ยง

impl<T> CloneToUninit for T
where T: Clone,

ยง

unsafe fn clone_to_uninit(&self, dest: *mut u8)

๐Ÿ”ฌThis is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Sourceยง

impl<T> Downcast<T> for T

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<C> DynamicBundle for C
where C: Component,

Sourceยง

fn get_components(self, func: &mut impl FnMut(StorageType, OwningPtr<'_>))

ยง

impl<T> From<T> for T

ยง

fn from(t: T) -> T

Returns the argument unchanged.

Sourceยง

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

Sourceยง

fn from_world(_world: &mut World) -> T

Creates Self using data from the given World.
Sourceยง

impl<T, W> HasTypeWitness<W> for T
where W: MakeTypeWitness<Arg = T>, T: ?Sized,

Sourceยง

const WITNESS: W = W::MAKE

A constant of the type witness
Sourceยง

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

Sourceยง

const TYPE_EQ: TypeEq<T, <T as Identity>::Type> = TypeEq::NEW

Proof that Self is the same type as Self::Type, provides methods for casting between Self and Self::Type.
Sourceยง

type Type = T

The same type as Self, used to emulate type equality bounds (T == U) with associated type equality constraints (T: Identity<Type = U>).
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
ยง

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

ยง

fn into(self) -> U

Calls U::from(self).

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

ยง

impl<T> ToOwned for T
where T: Clone,

ยง

type Owned = T

The resulting type after obtaining ownership.
ยง

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
ยง

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
ยง

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

ยง

type Error = Infallible

The type returned in the event of a conversion error.
ยง

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

Performs the conversion.
ยง

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

ยง

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

The type returned in the event of a conversion error.
ยง

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

Performs the conversion.
Sourceยง

impl<T> TypeData for T
where T: 'static + Send + Sync + Clone,

Sourceยง

impl<T> Upcast<T> for T

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> ConditionalSend for T
where T: Send,

Sourceยง

impl<T> Settings for T
where T: 'static + Send + Sync,

Sourceยง

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

Sourceยง

impl<T> WasmNotSendSync for T

Sourceยง

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