resty 0.1.6

A fast, concurrent and multi-threadable REST framework
Documentation
use crate::{ContentType, DeserializeBuffered, RestResponse, Serialize};

/// An extractor and content type for sending and receiving XML
pub struct XML<T: serde::de::DeserializeOwned + serde::Serialize>(pub T);
impl<T> DeserializeBuffered for XML<T>
where
    T: serde::de::DeserializeOwned + serde::Serialize,
{
    fn deserialize(data: &[u8]) -> Result<Self, Box<dyn std::error::Error>> {
        Ok(XML(serde_xml_rs::from_reader(data)?))
    }
}

impl<T> Serialize for XML<T>
where
    T: serde::de::DeserializeOwned + serde::Serialize,
{
    fn serialize(data: &Self) -> Result<Vec<u8>, Box<dyn std::error::Error>> {
        let mut vec = Vec::new();
        serde_xml_rs::to_writer(&mut vec, &data.0)?;
        Ok(vec)
    }
}

impl<T: serde::de::DeserializeOwned + serde::Serialize + RestResponse> ContentType<T> for XML<T> {
    const CONTENT_TYPE: &'static str = "application/xml";
}