//! UI node types and related data structures. //! //! Layouts are composed of multiple nodes, which live in a tree-like data structure. #[cfg(feature = "taffy_tree")] use slotmap::{DefaultKey, Key, KeyData}; /// A type representing the id of a single node in a tree of nodes /// /// Internally it is a wrapper around a u64 and a `NodeId` can be converted to and from /// and u64 if needed. #[derive(Debug, Copy, Clone, PartialEq, Eq, Hash)] pub struct NodeId(u64); impl NodeId { /// Create a new NodeId from a u64 value pub const fn new(val: u64) -> Self { Self(val) } } impl From for NodeId { #[inline] fn from(raw: u64) -> Self { Self(raw) } } impl From for u64 { #[inline] fn from(id: NodeId) -> Self { id.0 } } impl From for NodeId { #[inline] fn from(raw: usize) -> Self { Self(raw as u64) } } impl From for usize { #[inline] fn from(id: NodeId) -> Self { id.0 as usize } } #[cfg(feature = "taffy_tree")] impl From for NodeId { #[inline] fn from(key: DefaultKey) -> Self { Self(key.data().as_ffi()) } } #[cfg(feature = "taffy_tree")] impl From for DefaultKey { #[inline] fn from(key: NodeId) -> Self { KeyData::from_ffi(key.0).into() } }