molecule_codegen/ast/verified/
has_name.rs1pub trait HasName {
2 fn name(&self) -> &str;
3 fn type_name(&self) -> &str;
4}
5
6macro_rules! impl_has_name_for_decl {
7 ($decl:ident, $type_name:ident) => {
8 impl HasName for super::$decl {
9 fn name(&self) -> &str {
10 &self.name
11 }
12 fn type_name(&self) -> &str {
13 stringify!($type_name)
14 }
15 }
16 };
17}
18
19impl_has_name_for_decl!(Primitive, Primitive);
20impl_has_name_for_decl!(Option_, Option);
21impl_has_name_for_decl!(Union, Union);
22impl_has_name_for_decl!(Array, Array);
23impl_has_name_for_decl!(Struct, Struct);
24impl_has_name_for_decl!(FixVec, FixVec);
25impl_has_name_for_decl!(DynVec, DynVec);
26impl_has_name_for_decl!(Table, Table);
27
28impl HasName for super::TopDecl {
29 fn name(&self) -> &str {
30 match self {
31 super::TopDecl::Primitive(inner) => inner.name(),
32 super::TopDecl::Option_(inner) => inner.name(),
33 super::TopDecl::Union(inner) => inner.name(),
34 super::TopDecl::Array(inner) => inner.name(),
35 super::TopDecl::Struct(inner) => inner.name(),
36 super::TopDecl::FixVec(inner) => inner.name(),
37 super::TopDecl::DynVec(inner) => inner.name(),
38 super::TopDecl::Table(inner) => inner.name(),
39 }
40 }
41
42 fn type_name(&self) -> &str {
43 match self {
44 super::TopDecl::Primitive(inner) => inner.type_name(),
45 super::TopDecl::Option_(inner) => inner.type_name(),
46 super::TopDecl::Union(inner) => inner.type_name(),
47 super::TopDecl::Array(inner) => inner.type_name(),
48 super::TopDecl::Struct(inner) => inner.type_name(),
49 super::TopDecl::FixVec(inner) => inner.type_name(),
50 super::TopDecl::DynVec(inner) => inner.type_name(),
51 super::TopDecl::Table(inner) => inner.type_name(),
52 }
53 }
54}