axum-cbor 0.1.1

Library for sending and receiving CBOR data in Axum web applications
Documentation
use axum_test::{TestRequest, TestResponse};
use serde::{de::DeserializeOwned, Serialize};

pub trait CborReq<T: Serialize> {
    #[must_use]
    fn cbor(self, cbor: &T) -> Self;
}

pub trait CborResp<T: DeserializeOwned> {
    fn cbor(self) -> T;
}

impl<T: Serialize> CborReq<T> for TestRequest {
    fn cbor(self, cbor: &T) -> Self {
        let mut body = Vec::new();
        ciborium::into_writer(&cbor, &mut body).unwrap();
        self.bytes(body.into()).content_type("application/cbor")
    }
}

impl<T: DeserializeOwned> CborResp<T> for TestResponse {
    fn cbor(self) -> T {
        let body = self.as_bytes().to_vec();
        ciborium::from_reader(body.as_slice()).unwrap()
    }
}