1use std::ops::Deref;
2
3use crate::request::Request;
4
5#[derive(Debug, Default, Clone, Copy)]
6pub struct State<S>(pub S);
7
8pub trait FromRequest<S> {
9 fn from_request(state: State<S>, request: Request) -> Self;
10}
11
12impl<S> FromRequest<S> for S
13where
14 S: Clone,
15{
16 fn from_request(state: State<S>, _request: Request) -> Self {
17 let State(inner_state) = state;
18 inner_state
19 }
20}
21
22impl<S> Deref for State<S> {
23 type Target = S;
24 fn deref(&self) -> &Self::Target {
25 &self.0
26 }
27}