use crate::graphql::{Document, IntoDocumentWithVariables};
pub const GRAPHQL_REQUEST_MEDIA_TYPE: &str = "application/json";
#[derive(Debug, Clone, PartialEq, Eq, serde::Serialize)]
pub struct RequestParameters {
pub query: Document,
#[serde(rename = "operationName", skip_serializing_if = "Option::is_none")]
pub operation_name: Option<String>,
#[serde(skip_serializing_if = "serde_json::Map::is_empty")]
pub variables: serde_json::Map<String, serde_json::Value>,
#[serde(skip_serializing_if = "serde_json::Map::is_empty")]
pub extensions: serde_json::Map<String, serde_json::Value>,
}
pub trait IntoRequestParameters {
fn into_request_parameters(self) -> RequestParameters;
}
impl IntoRequestParameters for RequestParameters {
#[inline]
fn into_request_parameters(self) -> RequestParameters {
self
}
}
impl<T> IntoRequestParameters for T
where
T: IntoDocumentWithVariables,
{
fn into_request_parameters(self) -> RequestParameters {
let (query, variables) = self.into_document_with_variables();
let variables = match serde_json::to_value(variables) {
Ok(serde_json::Value::Object(vars)) => Some(vars),
_ => None,
};
RequestParameters {
query,
operation_name: None,
variables: variables.unwrap_or_default(),
extensions: Default::default(),
}
}
}