qwreey_rocket/
responder.rs

1use std::sync::Arc;
2
3use qwreey_utility_rs::ElementReadHandle;
4use rocket::{
5    http::ContentType,
6    response::{Responder, Result as RocketResult},
7    Request, Response,
8};
9
10pub struct ElementResponder<'a> {
11    content_type: ContentType,
12    body: ElementReadHandle<'a, Arc<str>>,
13}
14impl<'a> ElementResponder<'a> {
15    pub fn new(content_type: ContentType, body: ElementReadHandle<'a, Arc<str>>) -> Self {
16        Self { content_type, body }
17    }
18}
19impl<'req, 'res: 'req> Responder<'req, 'res> for ElementResponder<'res> {
20    fn respond_to(self, request: &'req Request) -> RocketResult<'res> {
21        Ok(Response::build_from(self.body.clone().respond_to(request)?)
22            .header(self.content_type)
23            .finalize())
24    }
25}
26pub trait ToElementResponder<'a> {
27    fn to_element_responder(self, content_type: ContentType) -> ElementResponder<'a>;
28}
29impl<'a> ToElementResponder<'a> for ElementReadHandle<'a, Arc<str>> {
30    fn to_element_responder(self, content_type: ContentType) -> ElementResponder<'a> {
31        ElementResponder::new(content_type, self)
32    }
33}