implement a simple approach to using the link directive
this is probably the simple way to get the link directive in place for federation 2 support - simply add a flag to the registry, and print out a hardcoded link directive configured for the current needs of async-graphql.
This commit is contained in:
parent
52d3e50af5
commit
3c6076a469
|
@ -111,7 +111,14 @@ impl Registry {
|
|||
writeln!(sdl).ok();
|
||||
}
|
||||
|
||||
if !options.federation {
|
||||
if options.federation {
|
||||
if self.enable_apollo_link {
|
||||
writeln!("extend schema @link(").ok();
|
||||
writelin!("\turl: \"https://specs.apollo.dev/federation/v2.0\",").ok();
|
||||
writeln!("\timport: [\"@key\", \"@tag\", \"@shareable\", \"@inaccessible\", \"@override\", \"@external\", \"@provides\", \"@requires\"]").ok();
|
||||
writeln!(")").ok();
|
||||
}
|
||||
} else {
|
||||
writeln!(sdl, "schema {{").ok();
|
||||
writeln!(sdl, "\tquery: {}", self.query_type).ok();
|
||||
if let Some(mutation_type) = self.mutation_type.as_deref() {
|
||||
|
|
|
@ -413,6 +413,11 @@ pub struct MetaDirective {
|
|||
pub visible: Option<MetaVisibleFn>,
|
||||
}
|
||||
|
||||
#[derive(Debug, Clone)]
|
||||
pub struct ApolloLinkConfig {
|
||||
pub extend_schema: bool,
|
||||
}
|
||||
|
||||
#[derive(Default)]
|
||||
pub struct Registry {
|
||||
pub types: BTreeMap<String, MetaType>,
|
||||
|
@ -423,6 +428,7 @@ pub struct Registry {
|
|||
pub subscription_type: Option<String>,
|
||||
pub introspection_mode: IntrospectionMode,
|
||||
pub enable_federation: bool,
|
||||
pub enable_apollo_link: bool,
|
||||
pub federation_subscription: bool,
|
||||
pub ignore_name_conflicts: HashSet<String>,
|
||||
}
|
||||
|
|
|
@ -30,6 +30,7 @@ use crate::{
|
|||
InputType, ObjectType, OutputType, QueryEnv, Request, Response, ServerError, ServerResult,
|
||||
SubscriptionType, Variables, ID,
|
||||
};
|
||||
use crate::registry::ApolloLinkConfig;
|
||||
|
||||
/// Introspection mode
|
||||
#[derive(Debug, Copy, Clone, PartialEq, Eq)]
|
||||
|
@ -173,6 +174,15 @@ impl<Query, Mutation, Subscription> SchemaBuilder<Query, Mutation, Subscription>
|
|||
self
|
||||
}
|
||||
|
||||
/// Enables printing the apollo federation 2 `@link` directive during federation schema export;
|
||||
/// the directive is attached to an "extend schema" element, and will have values set to ensure that
|
||||
/// the federation schema directives and types are named properly.
|
||||
#[must_use]
|
||||
pub fn enable_apollo_fed2_link(mut self) -> Self {
|
||||
self.registry.enable_apollo_link = true;
|
||||
self
|
||||
}
|
||||
|
||||
/// Make the Federation SDL include subscriptions.
|
||||
///
|
||||
/// Note: Not included by default, in order to be compatible with Apollo
|
||||
|
|
Loading…
Reference in New Issue