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}