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>>),
CompositeRequire {
subgraph_id: federated::SubgraphId,
field: subgraphs::StringId,
},
CompositeIs {
subgraph_id: federated::SubgraphId,
field: subgraphs::StringId,
},
CompositeInternal(federated::SubgraphId),
CompositeLookup(federated::SubgraphId),
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,
}