60 lines
1.3 KiB
Rust
60 lines
1.3 KiB
Rust
//! Node types for the RadixTree module.
|
|
|
|
/// Represents a node in the radix tree.
|
|
#[derive(Debug, Clone, PartialEq)]
|
|
pub struct Node {
|
|
/// The segment of the key stored at this node.
|
|
pub key_segment: String,
|
|
|
|
/// Value stored at this node (empty if not a leaf).
|
|
pub value: Vec<u8>,
|
|
|
|
/// References to child nodes.
|
|
pub children: Vec<NodeRef>,
|
|
|
|
/// Whether this node is a leaf node.
|
|
pub is_leaf: bool,
|
|
}
|
|
|
|
/// Reference to a node in the database.
|
|
#[derive(Debug, Clone, PartialEq)]
|
|
pub struct NodeRef {
|
|
/// The key segment for this child.
|
|
pub key_part: String,
|
|
|
|
/// Database ID of the node.
|
|
pub node_id: u32,
|
|
}
|
|
|
|
impl Node {
|
|
/// Creates a new node.
|
|
pub fn new(key_segment: String, value: Vec<u8>, is_leaf: bool) -> Self {
|
|
Self {
|
|
key_segment,
|
|
value,
|
|
children: Vec::new(),
|
|
is_leaf,
|
|
}
|
|
}
|
|
|
|
/// Creates a new root node.
|
|
pub fn new_root() -> Self {
|
|
Self {
|
|
key_segment: String::new(),
|
|
value: Vec::new(),
|
|
children: Vec::new(),
|
|
is_leaf: false,
|
|
}
|
|
}
|
|
}
|
|
|
|
impl NodeRef {
|
|
/// Creates a new node reference.
|
|
pub fn new(key_part: String, node_id: u32) -> Self {
|
|
Self {
|
|
key_part,
|
|
node_id,
|
|
}
|
|
}
|
|
}
|