graphql-composition 0.12.2

An implementation of GraphQL federated schema composition
Documentation
use crate::{
    federated_graph::{self as federated, OverrideLabel, OverrideSource},
    subgraphs::{self, FieldType, KeyId},
};
pub(crate) use federated::JoinEnumValueDirective;

#[derive(Clone, PartialEq)]
pub(crate) enum Directive {
    Authenticated,
    OneOf,
    Deprecated {
        reason: Option<federated::StringId>,
    },
    Inaccessible,
    Policy(Vec<Vec<federated::StringId>>),
    RequiresScopes(Vec<Vec<federated::StringId>>),
    /// @composite__require
    CompositeRequire {
        subgraph_id: federated::SubgraphId,
        field: subgraphs::StringId,
    },
    /// @composite__is
    CompositeIs {
        subgraph_id: federated::SubgraphId,
        field: subgraphs::StringId,
    },
    /// @composite__internal
    CompositeInternal(federated::SubgraphId),
    /// @composite__lookup
    CompositeLookup(federated::SubgraphId),
    /// @composite__derive
    CompositeDerive(federated::SubgraphId),
    Cost {
        weight: i32,
    },
    Other {
        name: federated::StringId,
        arguments: Vec<(federated::StringId, subgraphs::Value)>,
        provenance: DirectiveProvenance,
    },
    JoinField(JoinFieldDirective),
    JoinEntityInterfaceField,
    JoinInputField(JoinInputFieldDirective),
    JoinType(JoinTypeDirective),
    JoinEnumValue(JoinEnumValueDirective),
    ListSize(federated::ListSizeDirective),
    JoinUnionMember(JoinUnionMemberDirective),
}

#[derive(PartialEq, PartialOrd, Clone)]
pub struct JoinUnionMemberDirective {
    pub member: subgraphs::DefinitionId,
}

#[derive(PartialEq, PartialOrd, Clone)]
pub struct JoinInputFieldDirective {
    pub subgraph_id: federated::SubgraphId,
    pub r#type: Option<FieldType>,
}

#[derive(PartialEq, PartialOrd, Clone)]
pub struct JoinFieldDirective {
    pub source_field: subgraphs::FieldId,
    pub r#type: Option<FieldType>,
    pub external: bool,
    pub r#override: Option<OverrideSource>,
    pub override_label: Option<OverrideLabel>,
}

#[derive(PartialEq, PartialOrd, Clone)]
pub struct JoinTypeDirective {
    pub subgraph_id: federated::SubgraphId,
    pub key: Option<KeyId>,
    pub is_interface_object: bool,
}

#[derive(Debug, PartialEq, Eq, Clone, Copy)]
pub(crate) enum DirectiveProvenance {
    LinkedFromExtension {
        linked_schema_id: subgraphs::LinkedSchemaId,
        extension_id: subgraphs::ExtensionId,
    },
    ComposeDirective {
        linked_schema_id: Option<subgraphs::LinkedSchemaId>,
    },
    Builtin,
}