graphql-schema-validation 0.1.3

A spec compliant implementation of GraphQL SDL schema validation
Documentation
mod arguments;
mod directive_definitions;
mod enums;
mod input_object_cycles;
mod input_objects;
mod input_types;
mod interface_implementers;
mod interfaces;
mod object_field;
mod objects;
mod output_types;
mod scalars;
mod schema_definition;
mod type_definition;
mod unions;

use self::{
    directive_definitions::*, enums::*, input_objects::*, input_types::*, interfaces::*, objects::*, scalars::*,
    schema_definition::*, type_definition::*, unions::*,
};
use crate::{diagnostics, Context, Options};
use async_graphql_parser::{types as ast, Positioned};

pub(crate) fn validate<'a>(parsed_ast: &'a ast::ServiceDocument, ctx: &mut Context<'a>) {
    for definition in &parsed_ast.definitions {
        match definition {
            ast::TypeSystemDefinition::Schema(def) => validate_schema_definition(def, ctx),
            ast::TypeSystemDefinition::Type(typedef) => validate_type_definition(typedef, ctx),
            ast::TypeSystemDefinition::Directive(def) => validate_directive_definition(def, ctx),
        }
    }

    validate_schema_definition_references(ctx);
    validate_root_types(ctx);
    validate_definitions_second_pass(parsed_ast, ctx);
}

fn extract_type_name(base: &ast::BaseType) -> &str {
    match base {
        ast::BaseType::Named(name) => name.as_str(),
        ast::BaseType::List(inner) => extract_type_name(&inner.base),
    }
}