deboa-extras 0.0.9-beta.11

deboa extras (serialization, compression, websockets, streams, catchers (middleware) and sse support).
use std::io::Cursor;

use deboa::{
    errors::{ContentError, DeboaError},
    serde::{RequestBody, ResponseBody},
    Result,
};
use serde::{Deserialize, Serialize};
pub struct CborBody;

const APPLICATION_CBOR: &str = "application/cbor";

impl RequestBody for CborBody {
    fn mime_type(&self) -> &str {
        APPLICATION_CBOR
    }

    fn serialize<T: Serialize>(&self, data: T) -> Result<Vec<u8>> {
        let mut buf = Vec::new();
        let result = ciborium::ser::into_writer(&data, &mut buf);

        if let Err(error) = result {
            return Err(DeboaError::Content(ContentError::Serialization {
                message: error.to_string(),
            }));
        }

        Ok(buf)
    }
}

impl ResponseBody for CborBody {
    fn deserialize<T: for<'a> Deserialize<'a>>(&self, body: Vec<u8>) -> Result<T> {
        let result = ciborium::de::from_reader(Cursor::new(body));

        match result {
            Ok(deserialized_body) => Ok(deserialized_body),
            Err(err) => {
                let content_err = ContentError::Deserialization { message: err.to_string() };
                Err(DeboaError::Content(content_err))
            }
        }
    }
}