rustantic/
models.rs

1use syn::{FieldsNamed, Type};
2
3#[derive(Clone)]
4pub struct ConstructorMetadata {
5    pub args: Vec<(String, Type)>,
6}
7
8#[derive(Clone)]
9pub(crate) struct StructMetadata {
10    pub ident: String,
11    pub constructor: Option<ConstructorMetadata>,
12}
13
14impl StructMetadata {
15    pub fn set_ctor(&mut self, ctor: ConstructorMetadata) {
16        self.constructor = Some(ctor);
17    }
18}
19
20pub(crate) struct UnitEnumMetadata {
21    pub ident: String,
22    pub variants: Vec<(String, Option<String>)>,
23}
24
25pub(crate) struct UnionVariantMetadata {
26    pub ident: String,
27    pub ty: Option<Type>,
28    #[allow(unused)]
29    pub named_fields: Option<FieldsNamed>,
30}
31
32pub(crate) struct DiscriminatedUnionMetadata {
33    pub ident: String,
34    pub variants: Vec<UnionVariantMetadata>,
35}
36
37pub(crate) enum ItemMetadata {
38    Struct(StructMetadata),
39    UnitEnum(UnitEnumMetadata),
40    DiscriminatedUnion(DiscriminatedUnionMetadata),
41}
42
43impl ItemMetadata {
44    pub(crate) fn ident(&self) -> &str {
45        match self {
46            ItemMetadata::Struct(struct_md) => &struct_md.ident,
47            ItemMetadata::UnitEnum(enum_md) => &enum_md.ident,
48            ItemMetadata::DiscriminatedUnion(union_md) => &union_md.ident,
49        }
50    }
51}