molecule_codegen/ast/verified/
has_name.rs

1pub 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}