use crate::ast;
use crate::schema::EnumType;
use crate::validation::diagnostics::DiagnosticData;
use crate::validation::DiagnosticList;
use crate::Node;
pub(crate) fn validate_enum_definition(
diagnostics: &mut DiagnosticList,
schema: &crate::Schema,
enum_def: &Node<EnumType>,
) {
super::directive::validate_directives(
diagnostics,
Some(schema),
enum_def.directives.iter_ast(),
ast::DirectiveLocation::Enum,
Default::default(),
);
for enum_val in enum_def.values.values() {
validate_enum_value(diagnostics, schema, enum_val);
}
if enum_def.values.is_empty() {
diagnostics.push(
enum_def.location(),
DiagnosticData::EmptyValueSet {
type_name: enum_def.name.clone(),
type_location: enum_def.location(),
extensions_locations: enum_def
.extensions()
.iter()
.map(|ext| ext.location())
.collect(),
},
);
}
}
pub(crate) fn validate_enum_value(
diagnostics: &mut DiagnosticList,
schema: &crate::Schema,
enum_val: &Node<ast::EnumValueDefinition>,
) {
crate::schema::validation::validate_type_system_name(
diagnostics,
&enum_val.value,
"an enum value",
);
super::directive::validate_directives(
diagnostics,
Some(schema),
enum_val.directives.iter(),
ast::DirectiveLocation::EnumValue,
Default::default(),
)
}