use serde::{Deserialize, Serialize};
use super::operations::IntermediateArgument;
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub struct IntermediateFragment {
pub name: String,
#[serde(rename = "on")]
pub type_condition: String,
pub fields: Vec<IntermediateFragmentField>,
#[serde(skip_serializing_if = "Option::is_none")]
pub description: Option<String>,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
#[serde(untagged)]
#[non_exhaustive]
pub enum IntermediateFragmentField {
Simple(String),
Complex(IntermediateFragmentFieldDef),
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub struct IntermediateFragmentFieldDef {
pub name: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub alias: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub fields: Option<Vec<IntermediateFragmentField>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub spread: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub directives: Option<Vec<IntermediateAppliedDirective>>,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub struct IntermediateDirective {
pub name: String,
pub locations: Vec<String>,
#[serde(default)]
pub arguments: Vec<IntermediateArgument>,
#[serde(default)]
pub repeatable: bool,
#[serde(skip_serializing_if = "Option::is_none")]
pub description: Option<String>,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub struct IntermediateAppliedDirective {
pub name: String,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub arguments: Option<serde_json::Value>,
}