1use crate::prelude::*;
2
3#[derive(Clone, Debug, Serialize)]
11pub struct Set {
12 def: Def,
13 name: &'static str,
14 item: Item,
15 ty: Type,
16}
17
18impl Set {
19 #[must_use]
21 pub const fn new(def: Def, name: &'static str, item: Item, ty: Type) -> Self {
22 Self {
23 def,
24 name,
25 item,
26 ty,
27 }
28 }
29
30 #[must_use]
32 pub const fn def(&self) -> &Def {
33 &self.def
34 }
35
36 #[must_use]
38 pub const fn name(&self) -> &'static str {
39 self.name
40 }
41
42 #[must_use]
44 pub const fn item(&self) -> &Item {
45 &self.item
46 }
47
48 #[must_use]
50 pub const fn ty(&self) -> &Type {
51 &self.ty
52 }
53}
54
55impl MacroNode for Set {
56 fn as_any(&self) -> &dyn std::any::Any {
57 self
58 }
59}
60
61impl ValidateNode for Set {
62 fn validate(&self) -> Result<(), ErrorTree> {
63 let mut errs = ErrorTree::new();
64 validate_source_name(
65 &mut errs,
66 "set type",
67 self.name(),
68 icydb_schema::TypeSourceKey::try_new,
69 );
70 errs.result()
71 }
72}
73
74impl VisitableNode for Set {
75 fn route_key(&self) -> String {
76 self.def().path()
77 }
78
79 fn drive<V: Visitor>(&self, v: &mut V) {
80 self.def().accept(v);
81 self.item().accept(v);
82 self.ty().accept(v);
83 }
84}