1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
//! # XML

use crate::extractor;
use quick_xml::de::from_reader;
use quick_xml::se::to_writer;
use quick_xml::DeError;
use serde::de::DeserializeOwned;
use serde::Serialize;

fn from_slice<T: DeserializeOwned>(s: &[u8]) -> Result<T, DeError> {
    from_reader(s)
}

fn to_vec<T: Serialize>(value: &T) -> Result<Vec<u8>, DeError> {
    let mut buffer = bytes::BytesMut::with_capacity(128);
    to_writer(&mut buffer, value)?;
    Ok(buffer.to_vec())
}

extractor!(
    XML,
    Xml,
    "application/xml",
    from_slice,
    DeError,
    to_vec,
    xml_test
);