apollo-compiler 1.0.0-beta.15

A compiler for the GraphQL query language.
Documentation
use super::FieldSet;
use crate::validation::fragment::validate_fragment_used;
use crate::validation::operation::validate_operation_definitions;
use crate::validation::selection::FieldsInSetCanMerge;
use crate::validation::DiagnosticList;
use crate::validation::Valid;
use crate::ExecutableDocument;
use crate::Schema;

pub(crate) fn validate_executable_document(
    errors: &mut DiagnosticList,
    schema: &Schema,
    document: &ExecutableDocument,
) {
    validate_with_or_without_schema(errors, Some(schema), document);
    validate_with_schema(errors, schema, document);
}

pub(crate) fn validate_standalone_executable(
    errors: &mut DiagnosticList,
    document: &ExecutableDocument,
) {
    validate_with_or_without_schema(errors, None, document);
}

fn validate_with_schema(
    errors: &mut DiagnosticList,
    schema: &Schema,
    document: &ExecutableDocument,
) {
    let mut fields_in_set_can_merge = FieldsInSetCanMerge::new(schema, document);
    for operation in document.all_operations() {
        crate::validation::operation::validate_subscription(document, operation, errors);
        fields_in_set_can_merge.validate_operation(operation, errors);
    }
}

pub(crate) fn validate_with_or_without_schema(
    errors: &mut DiagnosticList,
    schema: Option<&Schema>,
    document: &ExecutableDocument,
) {
    validate_operation_definitions(errors, schema, document);
    for def in document.fragments.values() {
        validate_fragment_used(errors, document, def);
    }
}

pub(crate) fn validate_field_set(
    diagnostics: &mut DiagnosticList,
    schema: &Valid<Schema>,
    field_set: &FieldSet,
) {
    let document = &ExecutableDocument::new(); // No fragment definitions
    crate::validation::selection::validate_selection_set(
        diagnostics,
        document,
        Some((schema, &field_set.selection_set.ty)),
        &field_set.selection_set,
        crate::validation::operation::OperationValidationConfig {
            schema: Some(schema),
            variables: &[],
        },
    )
}