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}