apollo_compiler/validation/
enum_.rs1use crate::ast;
2use crate::schema::EnumType;
3use crate::validation::diagnostics::DiagnosticData;
4use crate::validation::DiagnosticList;
5use crate::Node;
6
7pub(crate) fn validate_enum_definition(
8    diagnostics: &mut DiagnosticList,
9    schema: &crate::Schema,
10    enum_def: &Node<EnumType>,
11) {
12    super::directive::validate_directives(
13        diagnostics,
14        Some(schema),
15        enum_def.directives.iter_ast(),
16        ast::DirectiveLocation::Enum,
17        Default::default(),
19    );
20
21    for enum_val in enum_def.values.values() {
22        validate_enum_value(diagnostics, schema, enum_val);
23    }
24
25    if enum_def.values.is_empty() {
28        diagnostics.push(
29            enum_def.location(),
30            DiagnosticData::EmptyValueSet {
31                type_name: enum_def.name.clone(),
32                type_location: enum_def.location(),
33                extensions_locations: enum_def
34                    .extensions()
35                    .iter()
36                    .map(|ext| ext.location())
37                    .collect(),
38            },
39        );
40    }
41}
42
43pub(crate) fn validate_enum_value(
44    diagnostics: &mut DiagnosticList,
45    schema: &crate::Schema,
46    enum_val: &Node<ast::EnumValueDefinition>,
47) {
48    crate::schema::validation::validate_type_system_name(
49        diagnostics,
50        &enum_val.value,
51        "an enum value",
52    );
53    super::directive::validate_directives(
54        diagnostics,
55        Some(schema),
56        enum_val.directives.iter(),
57        ast::DirectiveLocation::EnumValue,
58        Default::default(),
60    )
61}