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()
|
|
|
|
),
|
|
|
|
);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|