1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
use crate::Inflection;

#[derive(Clone, Debug)]
pub enum Type {
    Named(String),
    String,
    Int,
    UnsignedInt,
    Float,
    Boolean,
    Option(Box<Type>),
    Array(Box<Type>),
    Map { key: Box<Type>, value: Box<Type> },
}

#[derive(Clone, Debug)]
pub struct StructMember {
    pub name: String,
    pub type_: Type,
}

#[derive(Clone, Debug)]
pub struct EnumCase {
    pub name: String,
    pub type_: EnumCaseType,
    pub inflection: Inflection,
}

#[derive(Clone, Debug)]
pub enum EnumCaseType {
    Simple,
    Tuple(Vec<Type>),
    Struct(Vec<StructMember>),
}

#[derive(Clone, Debug)]
pub enum EnumType {
    Simple,
    Complex {
        case_key: String,
        content_key: Option<String>,
    },
}

// #[derive(Clone, Debug)]
// pub struct TypeSlot {
//     pub optional: bool,
//     pub type_: Type,
// }