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

31 lines
1003 B
Rust
Raw Normal View History

use crate::parser::types::{Name, OperationDefinition, OperationType};
2020-03-24 10:54:22 +00:00
use crate::validation::visitor::{Visitor, VisitorContext};
2020-05-10 02:59:51 +00:00
use crate::Positioned;
2020-03-14 03:46:20 +00:00
#[derive(Default)]
pub struct UploadFile;
impl<'a> Visitor<'a> for UploadFile {
fn enter_operation_definition(
&mut self,
2020-03-22 08:45:59 +00:00
ctx: &mut VisitorContext<'a>,
_name: Option<&'a Name>,
2020-05-10 02:59:51 +00:00
operation_definition: &'a Positioned<OperationDefinition>,
2020-03-14 03:46:20 +00:00
) {
2020-09-06 05:38:31 +00:00
for var in &operation_definition.node.variable_definitions {
2020-09-06 06:16:36 +00:00
if let Some(ty) = ctx
.registry
.concrete_type_by_parsed_type(&var.node.var_type.node)
{
2020-09-06 10:38:06 +00:00
if operation_definition.node.ty != OperationType::Mutation && ty.name() == "Upload"
{
2020-09-06 10:59:38 +00:00
ctx.report_error(
vec![var.pos],
"The Upload type is only allowed to be defined on a mutation",
);
2020-04-05 08:00:26 +00:00
}
}
2020-03-14 03:46:20 +00:00
}
}
}