Skip to main content

apollo_federation/query_plan/
requires_selection.rs

1//! A selection set representation for `FetchNode::requires`:
2//!
3//! * Does not contain fragment spreads
4//! * Is (de)serializable
5
6use apollo_compiler::Name;
7use serde::Deserialize;
8use serde::Serialize;
9
10#[derive(Debug, Clone, PartialEq, Deserialize, Serialize)]
11#[serde(rename_all = "PascalCase", tag = "kind")]
12pub enum Selection {
13    Field(Field),
14    InlineFragment(InlineFragment),
15}
16
17#[derive(Debug, Clone, PartialEq, Deserialize, Serialize)]
18#[serde(rename_all = "camelCase")]
19pub struct Field {
20    #[serde(skip_serializing_if = "Option::is_none")]
21    pub alias: Option<Name>,
22    pub name: Name,
23    #[serde(skip_serializing_if = "Vec::is_empty")]
24    #[serde(default)]
25    pub selections: Vec<Selection>,
26}
27
28#[derive(Debug, Clone, PartialEq, Deserialize, Serialize)]
29#[serde(rename_all = "camelCase")]
30pub struct InlineFragment {
31    #[serde(skip_serializing_if = "Option::is_none")]
32    pub type_condition: Option<Name>,
33    pub selections: Vec<Selection>,
34}