Skip to main content

icydb_schema/node/
map.rs

1use crate::prelude::*;
2
3///
4/// Map
5///
6/// Schema node describing a map collection with key/value descriptors and one
7/// canonical runtime type.
8///
9
10#[derive(Clone, Debug, Serialize)]
11pub struct Map {
12    def: Def,
13    key: Item,
14    value: Value,
15    ty: Type,
16}
17
18impl Map {
19    /// Creates a map node from its canonical schema parts.
20    #[must_use]
21    pub const fn new(def: Def, key: Item, value: Value, ty: Type) -> Self {
22        Self {
23            def,
24            key,
25            value,
26            ty,
27        }
28    }
29
30    /// Returns the definition metadata for this map node.
31    #[must_use]
32    pub const fn def(&self) -> &Def {
33        &self.def
34    }
35
36    /// Returns the key descriptor.
37    #[must_use]
38    pub const fn key(&self) -> &Item {
39        &self.key
40    }
41
42    /// Returns the value descriptor.
43    #[must_use]
44    pub const fn value(&self) -> &Value {
45        &self.value
46    }
47
48    /// Returns the canonical runtime type descriptor.
49    #[must_use]
50    pub const fn ty(&self) -> &Type {
51        &self.ty
52    }
53}
54
55impl MacroNode for Map {
56    fn as_any(&self) -> &dyn std::any::Any {
57        self
58    }
59}
60
61impl TypeNode for Map {
62    fn ty(&self) -> &Type {
63        self.ty()
64    }
65}
66
67impl ValidateNode for Map {}
68
69impl VisitableNode for Map {
70    fn route_key(&self) -> String {
71        self.def().path()
72    }
73
74    fn drive<V: Visitor>(&self, v: &mut V) {
75        self.def().accept(v);
76        self.key().accept(v);
77        self.value().accept(v);
78        self.ty().accept(v);
79    }
80}