channel_server/request/
data.rs

1use std::ops::Deref;
2
3use crate::{Body, ChannelError, FromRequest, Request};
4
5pub struct Data<T>(pub T);
6
7impl<T> Deref for Data<T> {
8    type Target = T;
9
10    fn deref(&self) -> &Self::Target {
11        &self.0
12    }
13}
14
15impl<'a, T: Send + Sync + 'static> FromRequest<'a> for Data<&'a T> {
16    fn from_request(req: &'a Request, _body: &mut Body) -> Result<Self, ChannelError> {
17        Ok(Data(req.extensions().get::<T>().ok_or_else(|| {
18            ChannelError::GetDataError(std::any::type_name::<T>().into())
19        })?))
20    }
21}