rusty_gql/types/
enum_type.rs1use 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}