graphql_schema_diff/
lib.rs1#![doc = include_str!("../README.md")]
2#![allow(unused_crate_dependencies)]
3#![deny(missing_docs)]
4
5mod change;
6mod state;
7mod traverse_schemas;
8
9pub use change::{Change, ChangeKind};
10
11use self::state::*;
12use cynic_parser::type_system as ast;
13use std::collections::HashMap;
14
15pub fn diff(source: &str, target: &str) -> Result<Vec<Change>, cynic_parser::Error> {
17 let [source, target] = [source, target].map(|sdl| -> Result<_, cynic_parser::Error> {
18 if sdl.trim().is_empty() {
19 Ok(None)
20 } else {
21 Ok(Some(cynic_parser::parse_type_system_document(sdl)?))
22 }
23 });
24 let [source, target] = [source?, target?];
25
26 let mut state = DiffState::default();
27
28 traverse_schemas::traverse_schemas([source.as_ref(), target.as_ref()], &mut state);
29
30 Ok(state.into_changes())
31}