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
use async_graphql::dynamic;

pub enum TypeRefBuilder {
    Named(String),
    NamedNN(String),
    List(String),
    ListNN(String),
    NNList(String),
    NNListNN(String),
}

impl TypeRefBuilder {
    pub fn optional(self) -> Self {
        match self {
            TypeRefBuilder::Named(name) => TypeRefBuilder::Named(name),
            TypeRefBuilder::NamedNN(name) => TypeRefBuilder::Named(name),
            TypeRefBuilder::List(name) => TypeRefBuilder::List(name),
            TypeRefBuilder::ListNN(name) => TypeRefBuilder::List(name),
            TypeRefBuilder::NNList(name) => TypeRefBuilder::NNList(name),
            TypeRefBuilder::NNListNN(name) => TypeRefBuilder::NNList(name),
        }
    }

    pub fn list(self) -> Self {
        match self {
            TypeRefBuilder::Named(name) => TypeRefBuilder::ListNN(name),
            TypeRefBuilder::NamedNN(name) => TypeRefBuilder::NNListNN(name),
            TypeRefBuilder::List(name) => TypeRefBuilder::List(name),
            TypeRefBuilder::ListNN(name) => TypeRefBuilder::ListNN(name),
            TypeRefBuilder::NNList(name) => TypeRefBuilder::NNList(name),
            TypeRefBuilder::NNListNN(name) => TypeRefBuilder::NNListNN(name),
        }
    }
}

impl From<TypeRefBuilder> for dynamic::TypeRef {
    fn from(value: TypeRefBuilder) -> Self {
        match value {
            TypeRefBuilder::Named(name) => dynamic::TypeRef::named(name),
            TypeRefBuilder::NamedNN(name) => dynamic::TypeRef::named_nn(name),
            TypeRefBuilder::List(name) => dynamic::TypeRef::named_list(name),
            TypeRefBuilder::ListNN(name) => dynamic::TypeRef::named_list_nn(name),
            TypeRefBuilder::NNList(name) => dynamic::TypeRef::named_nn_list(name),
            TypeRefBuilder::NNListNN(name) => dynamic::TypeRef::named_nn_list_nn(name),
        }
    }
}