use crate::{
codec::{Decode, DecodeSeq, Encode, GenericCodec, GenericDecodeWrapper, GenericEncodeWrapper},
collection::Vector,
};
#[cfg_attr(feature = "serde", derive(serde::Serialize))]
#[derive(Debug)]
pub struct GraphQlEncoder<ON, Q, V> {
#[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
pub operation_name: Option<ON>,
pub query: Q,
#[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
pub variables: Option<V>,
}
impl<'de, ON, Q, V> Decode<'de, GenericCodec<()>> for GraphQlEncoder<ON, Q, V>
where
Q: Default,
{
#[inline]
fn decode(_: &mut GenericDecodeWrapper<'de>) -> crate::Result<Self> {
Ok(Self { operation_name: None, query: Q::default(), variables: None })
}
}
impl<'de, ON, Q, V> DecodeSeq<'de, GenericCodec<()>> for GraphQlEncoder<ON, Q, V>
where
Q: Default,
{
#[inline]
fn decode_seq(_: &mut Vector<Self>, _: &mut GenericDecodeWrapper<'de>) -> crate::Result<()> {
Ok(())
}
}
impl<ON, Q, V> Encode<GenericCodec<()>> for GraphQlEncoder<ON, Q, V> {
#[inline]
fn encode(&self, _: &mut GenericEncodeWrapper<'_>) -> crate::Result<()> {
Ok(())
}
}
#[cfg(feature = "serde_json")]
mod serde_json {
use crate::codec::{format::SerdeJson, protocol::GraphQlEncoder};
use serde::Serialize;
_impl_enc! {
GraphQlEncoder<ON: Serialize, Q: Serialize, V: Serialize>,
SerdeJson,
|this, _aux, ew| {
serde_json::to_writer(&mut *ew.vector, this)?;
}
}
}