crdt_tree/
treenode.rs

1// Copyright (c) 2022, MaidSafe.
2// All rights reserved.
3//
4// This SAFE Network Software is licensed under the BSD-3-Clause license.
5// Please see the LICENSE file for more details.
6
7use serde::{Deserialize, Serialize};
8use std::cmp::{Eq, PartialEq};
9
10use super::{TreeId, TreeMeta};
11
12/// `TreeNode` is a node that is stored in a `Tree`.
13///
14/// Logically, each `TreeNode` consists of a triple `(parent_id, metadata, child_id)`.
15/// However, in this implementation, the `child_id` is stored as the
16/// key in `Tree::triples HashMap<ID, TreeNode>`
17#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
18pub struct TreeNode<ID: TreeId, TM: TreeMeta> {
19    parent_id: ID,
20    metadata: TM,
21}
22
23impl<ID: TreeId, TM: TreeMeta> TreeNode<ID, TM> {
24    // `parent_id: ID`,
25    // `metadata: TM`,
26    // note: `child_id` is stored only as a map key in tree.
27
28    /// creates a new `TreeNode` instance
29    pub fn new(parent_id: ID, metadata: TM) -> Self {
30        Self {
31            parent_id,
32            metadata,
33        }
34    }
35
36    /// returns `parent_id` reference
37    pub fn parent_id(&self) -> &ID {
38        &self.parent_id
39    }
40
41    /// returns metadata reference
42    pub fn metadata(&self) -> &TM {
43        &self.metadata
44    }
45}