icydb_schema/node/
newtype.rs1use crate::prelude::*;
2
3#[derive(Clone, Debug, Serialize)]
8pub struct Newtype {
9 def: Def,
10 item: Item,
11
12 #[serde(default, skip_serializing_if = "Option::is_none")]
13 default: Option<Arg>,
14
15 ty: Type,
16}
17
18impl Newtype {
19 #[must_use]
21 pub const fn new(def: Def, item: Item, default: Option<Arg>, ty: Type) -> Self {
22 Self {
23 def,
24 item,
25 default,
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 item(&self) -> &Item {
39 &self.item
40 }
41
42 #[must_use]
44 pub const fn default(&self) -> Option<&Arg> {
45 self.default.as_ref()
46 }
47
48 #[must_use]
50 pub const fn ty(&self) -> &Type {
51 &self.ty
52 }
53}
54
55impl MacroNode for Newtype {
56 fn as_any(&self) -> &dyn std::any::Any {
57 self
58 }
59}
60
61impl TypeNode for Newtype {
62 fn ty(&self) -> &Type {
63 self.ty()
64 }
65}
66
67impl ValidateNode for Newtype {}
68
69impl VisitableNode for Newtype {
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.item().accept(v);
77 if let Some(node) = self.default() {
78 node.accept(v);
79 }
80 self.ty().accept(v);
81 }
82}