actix_web_lab/
cbor.rs

1//! CBOR responder.
2
3use std::sync::LazyLock;
4
5use actix_web::{HttpRequest, HttpResponse, Responder};
6use bytes::Bytes;
7use derive_more::Display;
8use mime::Mime;
9use serde::Serialize;
10
11static CBOR_MIME: LazyLock<Mime> = LazyLock::new(|| "application/cbor".parse().unwrap());
12
13/// [CBOR] responder.
14///
15/// [CBOR]: https://cbor.io/
16#[derive(Debug, Display)]
17pub struct Cbor<T>(pub T);
18
19impl_more::impl_deref_and_mut!(<T> in Cbor<T> => T);
20
21impl<T: Serialize> Responder for Cbor<T> {
22    type Body = Bytes;
23
24    fn respond_to(self, _req: &HttpRequest) -> HttpResponse<Self::Body> {
25        let body = Bytes::from(serde_cbor_2::to_vec(&self.0).unwrap());
26
27        HttpResponse::Ok()
28            .content_type(CBOR_MIME.clone())
29            .message_body(body)
30            .unwrap()
31    }
32}