rusty_gql/types/
enum_type.rs

1use super::directive::GqlDirective;
2use graphql_parser::{
3    schema::{EnumType as ParserEnumType, EnumValue},
4    Pos,
5};
6
7#[derive(Debug, Clone)]
8pub struct EnumType {
9    pub name: String,
10    pub description: Option<String>,
11    pub position: Pos,
12    pub directives: Vec<GqlDirective>,
13    pub values: Vec<EnumTypeValue>,
14}
15
16impl<'a> From<ParserEnumType<'a, String>> for EnumType {
17    fn from(gql_enum: ParserEnumType<'a, String>) -> Self {
18        let directives = GqlDirective::from_vec_directive(gql_enum.directives);
19
20        let values = gql_enum
21            .values
22            .into_iter()
23            .map(EnumTypeValue::from)
24            .collect();
25
26        EnumType {
27            name: gql_enum.name,
28            description: gql_enum.description,
29            position: gql_enum.position,
30            directives,
31            values,
32        }
33    }
34}
35
36impl EnumType {
37    pub fn contains(&self, name: &str) -> bool {
38        self.values
39            .iter()
40            .map(|v| v.name.clone())
41            .any(|x| x == *name)
42    }
43}
44
45#[derive(Debug, Clone)]
46pub struct EnumTypeValue {
47    pub name: String,
48    pub description: Option<String>,
49    pub position: Pos,
50    pub directives: Vec<GqlDirective>,
51}
52
53impl<'a> From<EnumValue<'a, String>> for EnumTypeValue {
54    fn from(enum_value: EnumValue<'a, String>) -> Self {
55        let directives = enum_value
56            .directives
57            .into_iter()
58            .map(GqlDirective::from)
59            .collect();
60
61        EnumTypeValue {
62            name: enum_value.name,
63            description: enum_value.description,
64            position: enum_value.position,
65            directives,
66        }
67    }
68}
69
70impl EnumTypeValue {
71    pub fn is_deprecated(&self) -> bool {
72        for dir in &self.directives {
73            if dir.name == "deprecated" {
74                return true;
75            }
76            continue;
77        }
78        false
79    }
80}