Feature Flagged Queries
Often in GraphQL there's only one server for a given schema. But sometimes there might be many servers that serve a different schema, and those servers might be serving different versions of that same schema. A classic example of this is the introspection query: servers support a different set of fields depending on which version of the specification they support and/or which RFCs they have implemented on top of that specification.
To support these cases, cynic allows you to associate fields in a
QueryFragment
with a feature:
#![allow(unused)] fn main() { #[derive(cynic::QueryFragment, Debug)] struct AuthorQuery { __typename: String, #[cynic(feature = "shiny")] shiny_new_field: Option<String> } }
This Author
struct will only query for shiny_new_field
if the shiny
feature has been enabled.
To enable features you need to use the lower-level OperationBuilder
to build
your Operation
(rather than the QueryBuilder
that is usually recommended):
#![allow(unused)] fn main() { let operation = cynic::OperationBuilder::<QueryWithFeatures, ()>::query() .with_variables(()) .with_feature_enabled("shiny") .build()?; }
For examples of this feature in action, take a look in the
cynic-introspection
crate, which uses it to support multiple versions of the
GraphQL specification, and the various RFCs that servers support.