async-graphql/src/validation/rules/variables_are_input_types.rs

30 lines
884 B
Rust
Raw Normal View History

2020-03-24 10:54:22 +00:00
use crate::validation::visitor::{Visitor, VisitorContext};
2020-03-10 06:14:09 +00:00
use graphql_parser::query::VariableDefinition;
#[derive(Default)]
pub struct VariablesAreInputTypes;
impl<'a> Visitor<'a> for VariablesAreInputTypes {
fn enter_variable_definition(
&mut self,
2020-03-22 08:45:59 +00:00
ctx: &mut VisitorContext<'a>,
2020-03-10 06:14:09 +00:00
variable_definition: &'a VariableDefinition,
) {
if let Some(ty) = ctx
.registry
2020-03-14 03:46:20 +00:00
.basic_type_by_parsed_type(&variable_definition.var_type)
2020-03-10 06:14:09 +00:00
{
if !ty.is_input() {
ctx.report_error(
vec![variable_definition.position],
format!(
"Variable \"{}\" cannot be of non-input type \"{}\"",
&variable_definition.name,
ty.name()
),
);
}
}
}
}