#![deny(unsafe_code, missing_docs, rust_2018_idioms)]
#![allow(unused_crate_dependencies)]
#![doc = include_str!("../README.md")]
mod context;
mod diagnostics;
mod validate;
use self::{context::*, diagnostics::*};
use std::collections::HashMap;
pub fn validate(sdl: &str) -> Diagnostics {
validate_with_options(sdl, Options::default())
}
pub fn validate_with_options(sdl: &str, options: Options) -> Diagnostics {
let parsed_ast = match async_graphql_parser::parse_schema(sdl) {
Ok(ast) => ast,
Err(err) => {
return Diagnostics {
errors: vec![miette::miette! {
"Syntax error: {}",
err.to_string()
}],
};
}
};
let mut ctx = Context::new(
sdl,
HashMap::with_capacity(parsed_ast.definitions.len()),
Diagnostics::default(),
options,
);
validate::validate(&parsed_ast, &mut ctx);
ctx.diagnostics
}
bitflags::bitflags! {
#[derive(Default)]
pub struct Options: u8 {
const FORBID_EXTENDING_UNKNOWN_TYPES = 0b1;
const DRAFT_VALIDATIONS = 0b01;
}
}