1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
use super::{DefaultVisitorContext, QueryVisitor, SchemaVisitor};
use crate::static_graphql::*;

pub enum ASTKind {
    Schema(schema::Document),
    Operation(query::Document),
}

pub trait ASTVisitor<T = DefaultVisitorContext>: QueryVisitor<T> + SchemaVisitor<T> {
    fn visit_ast(&mut self, ast: ASTKind, visitor_context: &mut T) {
        match ast {
            ASTKind::Schema(schema) => self.visit_schema_document(&schema, visitor_context),
            ASTKind::Operation(operation) => self.visit_document(&operation, visitor_context),
        }
    }
}