Skip to content

Commit 2c756fa

Browse files
authored
Merge pull request #262 from H1rono/fix-with-state
2 parents 9b65936 + 01c8b36 commit 2c756fa

File tree

1 file changed

+20
-4
lines changed

1 file changed

+20
-4
lines changed

src/handler.rs

+20-4
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
//! [`Handler`]: crate::Handler
77
88
use std::marker::PhantomData;
9+
use std::sync::Arc;
910
use std::task::{Context, Poll};
1011

1112
use futures::future::Ready as ReadyFuture;
@@ -63,10 +64,24 @@ impl<T> Service<T> for Sink {
6364
#[must_use]
6465
#[derive(Debug, Clone)]
6566
pub struct WithState<State, Service> {
66-
state: State,
67+
state: Arc<State>,
6768
service: Service,
6869
}
6970

71+
impl<State, Srv> WithState<State, Srv> {
72+
fn new(state: State, service: Srv) -> Self {
73+
let state = Arc::new(state);
74+
Self { state, service }
75+
}
76+
77+
fn clone_state(&self) -> State
78+
where
79+
State: Clone,
80+
{
81+
Arc::unwrap_or_clone(Arc::clone(&self.state))
82+
}
83+
}
84+
7085
impl<State, Srv> Service<Event> for WithState<State, Srv>
7186
where
7287
Srv: Service<(State, Event)>,
@@ -82,7 +97,7 @@ where
8297

8398
#[inline]
8499
fn call(&mut self, request: Event) -> Self::Future {
85-
self.service.call((self.state.clone(), request))
100+
self.service.call((self.clone_state(), request))
86101
}
87102
}
88103

@@ -101,7 +116,7 @@ where
101116

102117
#[inline]
103118
fn call(&mut self, (_, request): (OState, Event)) -> Self::Future {
104-
self.service.call((self.state.clone(), request))
119+
self.service.call((self.clone_state(), request))
105120
}
106121
}
107122

@@ -171,10 +186,11 @@ impl<Service> Handler<Service> {
171186
/// ```
172187
///
173188
/// [`Clone`]: std::clone::Clone
189+
// TODO: State: Clone
174190
pub fn with_state<State>(self, state: State) -> Handler<WithState<State, Service>> {
175191
let Self { service, parser } = self;
176192
Handler {
177-
service: WithState { state, service },
193+
service: WithState::new(state, service),
178194
parser,
179195
}
180196
}

0 commit comments

Comments
 (0)