1
0
mirror of https://github.com/fafhrd91/actix-net synced 2024-11-30 22:14:35 +01:00

Merge pull request #149 from taiki-e/pin-project

Remove uses of pin_project::project attribute
This commit is contained in:
Yuki Okushi 2020-06-07 02:01:08 +09:00 committed by GitHub
commit 7140c04c44
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
11 changed files with 37 additions and 54 deletions

View File

@ -24,4 +24,4 @@ futures-sink = { version = "0.3.4", default-features = false }
tokio = { version = "0.2.4", default-features=false } tokio = { version = "0.2.4", default-features=false }
tokio-util = { version = "0.2.0", default-features=false, features=["codec"] } tokio-util = { version = "0.2.0", default-features=false, features=["codec"] }
log = "0.4" log = "0.4"
pin-project = "0.4.8" pin-project = "0.4.17"

View File

@ -24,7 +24,7 @@ bytes = "0.5.3"
either = "1.5.3" either = "1.5.3"
futures-sink = { version = "0.3.4", default-features = false } futures-sink = { version = "0.3.4", default-features = false }
futures-core = { version = "0.3.4", default-features = false } futures-core = { version = "0.3.4", default-features = false }
pin-project = "0.4.6" pin-project = "0.4.17"
log = "0.4" log = "0.4"
[dev-dependencies] [dev-dependencies]

View File

@ -8,7 +8,6 @@ use actix_codec::{AsyncRead, AsyncWrite, Decoder, Encoder, Framed};
use actix_service::{IntoService, IntoServiceFactory, Service, ServiceFactory}; use actix_service::{IntoService, IntoServiceFactory, Service, ServiceFactory};
use either::Either; use either::Either;
use futures_core::{ready, stream::Stream}; use futures_core::{ready, stream::Stream};
use pin_project::project;
use crate::connect::{Connect, ConnectResult}; use crate::connect::{Connect, ConnectResult};
use crate::dispatcher::Dispatcher; use crate::dispatcher::Dispatcher;
@ -336,7 +335,7 @@ where
} }
} }
#[pin_project::pin_project] #[pin_project::pin_project(project = FramedServiceImplResponseInnerProj)]
enum FramedServiceImplResponseInner<St, Io, Codec, Out, C, T> enum FramedServiceImplResponseInner<St, Io, Codec, Out, C, T>
where where
C: Service<Request = Connect<Io, Codec>, Response = ConnectResult<Io, St, Codec, Out>>, C: Service<Request = Connect<Io, Codec>, Response = ConnectResult<Io, St, Codec, Out>>,
@ -378,7 +377,6 @@ where
<Codec as Encoder>::Error: std::fmt::Debug, <Codec as Encoder>::Error: std::fmt::Debug,
Out: Stream<Item = <Codec as Encoder>::Item> + Unpin, Out: Stream<Item = <Codec as Encoder>::Item> + Unpin,
{ {
#[project]
fn poll( fn poll(
self: Pin<&mut Self>, self: Pin<&mut Self>,
cx: &mut Context<'_>, cx: &mut Context<'_>,
@ -386,9 +384,8 @@ where
FramedServiceImplResponseInner<St, Io, Codec, Out, C, T>, FramedServiceImplResponseInner<St, Io, Codec, Out, C, T>,
Poll<Result<(), ServiceError<C::Error, Codec>>>, Poll<Result<(), ServiceError<C::Error, Codec>>>,
> { > {
#[project]
match self.project() { match self.project() {
FramedServiceImplResponseInner::Connect(fut, handler) => match fut.poll(cx) { FramedServiceImplResponseInnerProj::Connect(fut, handler) => match fut.poll(cx) {
Poll::Ready(Ok(res)) => Either::Left(FramedServiceImplResponseInner::Handler( Poll::Ready(Ok(res)) => Either::Left(FramedServiceImplResponseInner::Handler(
handler.new_service(res.state), handler.new_service(res.state),
Some(res.framed), Some(res.framed),
@ -397,7 +394,7 @@ where
Poll::Pending => Either::Right(Poll::Pending), Poll::Pending => Either::Right(Poll::Pending),
Poll::Ready(Err(e)) => Either::Right(Poll::Ready(Err(e.into()))), Poll::Ready(Err(e)) => Either::Right(Poll::Ready(Err(e.into()))),
}, },
FramedServiceImplResponseInner::Handler(fut, framed, out) => { FramedServiceImplResponseInnerProj::Handler(fut, framed, out) => {
match fut.poll(cx) { match fut.poll(cx) {
Poll::Ready(Ok(handler)) => { Poll::Ready(Ok(handler)) => {
Either::Left(FramedServiceImplResponseInner::Dispatcher( Either::Left(FramedServiceImplResponseInner::Dispatcher(
@ -408,7 +405,7 @@ where
Poll::Ready(Err(e)) => Either::Right(Poll::Ready(Err(e.into()))), Poll::Ready(Err(e)) => Either::Right(Poll::Ready(Err(e.into()))),
} }
} }
FramedServiceImplResponseInner::Dispatcher(fut) => { FramedServiceImplResponseInnerProj::Dispatcher(fut) => {
Either::Right(fut.poll(cx)) Either::Right(fut.poll(cx))
} }
} }

View File

@ -17,7 +17,7 @@ path = "src/lib.rs"
[dependencies] [dependencies]
futures-util = "0.3.1" futures-util = "0.3.1"
pin-project = "0.4.6" pin-project = "0.4.17"
[dev-dependencies] [dev-dependencies]
actix-rt = "1.0.0" actix-rt = "1.0.0"

View File

@ -81,7 +81,7 @@ where
state: State<A, B>, state: State<A, B>,
} }
#[pin_project::pin_project] #[pin_project::pin_project(project = StateProj)]
enum State<A, B> enum State<A, B>
where where
A: Service, A: Service,
@ -99,13 +99,11 @@ where
{ {
type Output = Result<B::Response, A::Error>; type Output = Result<B::Response, A::Error>;
#[pin_project::project]
fn poll(mut self: Pin<&mut Self>, cx: &mut Context<'_>) -> Poll<Self::Output> { fn poll(mut self: Pin<&mut Self>, cx: &mut Context<'_>) -> Poll<Self::Output> {
let mut this = self.as_mut().project(); let mut this = self.as_mut().project();
#[project]
match this.state.as_mut().project() { match this.state.as_mut().project() {
State::A(fut, b) => match fut.poll(cx)? { StateProj::A(fut, b) => match fut.poll(cx)? {
Poll::Ready(res) => { Poll::Ready(res) => {
let b = b.take().unwrap(); let b = b.take().unwrap();
this.state.set(State::Empty); // drop fut A this.state.set(State::Empty); // drop fut A
@ -115,11 +113,11 @@ where
} }
Poll::Pending => Poll::Pending, Poll::Pending => Poll::Pending,
}, },
State::B(fut) => fut.poll(cx).map(|r| { StateProj::B(fut) => fut.poll(cx).map(|r| {
this.state.set(State::Empty); this.state.set(State::Empty);
r r
}), }),
State::Empty => panic!("future must not be polled after it returned `Poll::Ready`"), StateProj::Empty => panic!("future must not be polled after it returned `Poll::Ready`"),
} }
} }
} }
@ -179,7 +177,7 @@ where
state: StateRC<A, B>, state: StateRC<A, B>,
} }
#[pin_project::pin_project] #[pin_project::pin_project(project = StateRCProj)]
enum StateRC<A, B> enum StateRC<A, B>
where where
A: Service, A: Service,
@ -197,13 +195,11 @@ where
{ {
type Output = Result<B::Response, A::Error>; type Output = Result<B::Response, A::Error>;
#[pin_project::project]
fn poll(mut self: Pin<&mut Self>, cx: &mut Context<'_>) -> Poll<Self::Output> { fn poll(mut self: Pin<&mut Self>, cx: &mut Context<'_>) -> Poll<Self::Output> {
let mut this = self.as_mut().project(); let mut this = self.as_mut().project();
#[project]
match this.state.as_mut().project() { match this.state.as_mut().project() {
StateRC::A(fut, b) => match fut.poll(cx)? { StateRCProj::A(fut, b) => match fut.poll(cx)? {
Poll::Ready(res) => { Poll::Ready(res) => {
let b = b.take().unwrap(); let b = b.take().unwrap();
this.state.set(StateRC::Empty); // drop fut A this.state.set(StateRC::Empty); // drop fut A
@ -213,11 +209,11 @@ where
} }
Poll::Pending => Poll::Pending, Poll::Pending => Poll::Pending,
}, },
StateRC::B(fut) => fut.poll(cx).map(|r| { StateRCProj::B(fut) => fut.poll(cx).map(|r| {
this.state.set(StateRC::Empty); this.state.set(StateRC::Empty);
r r
}), }),
StateRC::Empty => panic!("future must not be polled after it returned `Poll::Ready`"), StateRCProj::Empty => panic!("future must not be polled after it returned `Poll::Ready`"),
} }
} }
} }

View File

@ -66,7 +66,7 @@ where
state: State<A, B>, state: State<A, B>,
} }
#[pin_project::pin_project] #[pin_project::pin_project(project = StateProj)]
enum State<A, B> enum State<A, B>
where where
A: Service, A: Service,
@ -84,13 +84,11 @@ where
{ {
type Output = Result<B::Response, A::Error>; type Output = Result<B::Response, A::Error>;
#[pin_project::project]
fn poll(mut self: Pin<&mut Self>, cx: &mut Context<'_>) -> Poll<Self::Output> { fn poll(mut self: Pin<&mut Self>, cx: &mut Context<'_>) -> Poll<Self::Output> {
let mut this = self.as_mut().project(); let mut this = self.as_mut().project();
#[project]
match this.state.as_mut().project() { match this.state.as_mut().project() {
State::A(fut, b) => match fut.poll(cx)? { StateProj::A(fut, b) => match fut.poll(cx)? {
Poll::Ready(res) => { Poll::Ready(res) => {
let mut b = b.take().unwrap(); let mut b = b.take().unwrap();
this.state.set(State::Empty); // drop fut A this.state.set(State::Empty); // drop fut A
@ -100,11 +98,11 @@ where
} }
Poll::Pending => Poll::Pending, Poll::Pending => Poll::Pending,
}, },
State::B(fut) => fut.poll(cx).map(|r| { StateProj::B(fut) => fut.poll(cx).map(|r| {
this.state.set(State::Empty); this.state.set(State::Empty);
r r
}), }),
State::Empty => panic!("future must not be polled after it returned `Poll::Ready`"), StateProj::Empty => panic!("future must not be polled after it returned `Poll::Ready`"),
} }
} }
} }

View File

@ -98,7 +98,7 @@ where
state: State<A, B, F, Fut, Res, Err>, state: State<A, B, F, Fut, Res, Err>,
} }
#[pin_project::pin_project] #[pin_project::pin_project(project = StateProj)]
enum State<A, B, F, Fut, Res, Err> enum State<A, B, F, Fut, Res, Err>
where where
A: Service, A: Service,
@ -123,13 +123,11 @@ where
{ {
type Output = Result<Res, Err>; type Output = Result<Res, Err>;
#[pin_project::project]
fn poll(mut self: Pin<&mut Self>, cx: &mut Context<'_>) -> Poll<Self::Output> { fn poll(mut self: Pin<&mut Self>, cx: &mut Context<'_>) -> Poll<Self::Output> {
let mut this = self.as_mut().project(); let mut this = self.as_mut().project();
#[project]
match this.state.as_mut().project() { match this.state.as_mut().project() {
State::A(fut, b) => match fut.poll(cx)? { StateProj::A(fut, b) => match fut.poll(cx)? {
Poll::Ready(res) => { Poll::Ready(res) => {
let mut b = b.take().unwrap(); let mut b = b.take().unwrap();
this.state.set(State::Empty); this.state.set(State::Empty);
@ -140,11 +138,11 @@ where
} }
Poll::Pending => Poll::Pending, Poll::Pending => Poll::Pending,
}, },
State::B(fut) => fut.poll(cx).map(|r| { StateProj::B(fut) => fut.poll(cx).map(|r| {
this.state.set(State::Empty); this.state.set(State::Empty);
r r
}), }),
State::Empty => panic!("future must not be polled after it returned `Poll::Ready`"), StateProj::Empty => panic!("future must not be polled after it returned `Poll::Ready`"),
} }
} }
} }

View File

@ -177,7 +177,7 @@ where
state: State<T, R, S>, state: State<T, R, S>,
} }
#[pin_project::pin_project] #[pin_project::pin_project(project = StateProj)]
enum State<T, R, S> enum State<T, R, S>
where where
T: ServiceFactory<Config = ()>, T: ServiceFactory<Config = ()>,
@ -200,20 +200,18 @@ where
{ {
type Output = Result<S, T::InitError>; type Output = Result<S, T::InitError>;
#[pin_project::project]
fn poll(mut self: Pin<&mut Self>, cx: &mut Context<'_>) -> Poll<Self::Output> { fn poll(mut self: Pin<&mut Self>, cx: &mut Context<'_>) -> Poll<Self::Output> {
let mut this = self.as_mut().project(); let mut this = self.as_mut().project();
#[project]
match this.state.as_mut().project() { match this.state.as_mut().project() {
State::A(fut) => match fut.poll(cx)? { StateProj::A(fut) => match fut.poll(cx)? {
Poll::Pending => Poll::Pending, Poll::Pending => Poll::Pending,
Poll::Ready(srv) => { Poll::Ready(srv) => {
this.state.set(State::B(srv)); this.state.set(State::B(srv));
self.poll(cx) self.poll(cx)
} }
}, },
State::B(srv) => match srv.poll_ready(cx)? { StateProj::B(srv) => match srv.poll_ready(cx)? {
Poll::Ready(_) => { Poll::Ready(_) => {
let fut = (this.store.get_mut().1)(this.cfg.take().unwrap(), srv); let fut = (this.store.get_mut().1)(this.cfg.take().unwrap(), srv);
this.state.set(State::C(fut)); this.state.set(State::C(fut));
@ -221,7 +219,7 @@ where
} }
Poll::Pending => Poll::Pending, Poll::Pending => Poll::Pending,
}, },
State::C(fut) => fut.poll(cx), StateProj::C(fut) => fut.poll(cx),
} }
} }
} }

View File

@ -66,7 +66,7 @@ where
state: State<A, B>, state: State<A, B>,
} }
#[pin_project::pin_project] #[pin_project::pin_project(project = StateProj)]
enum State<A, B> enum State<A, B>
where where
A: Service, A: Service,
@ -84,13 +84,11 @@ where
{ {
type Output = Result<B::Response, B::Error>; type Output = Result<B::Response, B::Error>;
#[pin_project::project]
fn poll(mut self: Pin<&mut Self>, cx: &mut Context<'_>) -> Poll<Self::Output> { fn poll(mut self: Pin<&mut Self>, cx: &mut Context<'_>) -> Poll<Self::Output> {
let mut this = self.as_mut().project(); let mut this = self.as_mut().project();
#[project]
match this.state.as_mut().project() { match this.state.as_mut().project() {
State::A(fut, b) => match fut.poll(cx) { StateProj::A(fut, b) => match fut.poll(cx) {
Poll::Ready(res) => { Poll::Ready(res) => {
let mut b = b.take().unwrap(); let mut b = b.take().unwrap();
this.state.set(State::Empty); // drop fut A this.state.set(State::Empty); // drop fut A
@ -100,11 +98,11 @@ where
} }
Poll::Pending => Poll::Pending, Poll::Pending => Poll::Pending,
}, },
State::B(fut) => fut.poll(cx).map(|r| { StateProj::B(fut) => fut.poll(cx).map(|r| {
this.state.set(State::Empty); this.state.set(State::Empty);
r r
}), }),
State::Empty => panic!("future must not be polled after it returned `Poll::Ready`"), StateProj::Empty => panic!("future must not be polled after it returned `Poll::Ready`"),
} }
} }
} }

View File

@ -211,7 +211,7 @@ where
state: ApplyTransformFutureState<T, S>, state: ApplyTransformFutureState<T, S>,
} }
#[pin_project::pin_project] #[pin_project::pin_project(project = ApplyTransformFutureStateProj)]
pub enum ApplyTransformFutureState<T, S> pub enum ApplyTransformFutureState<T, S>
where where
S: ServiceFactory, S: ServiceFactory,
@ -228,13 +228,11 @@ where
{ {
type Output = Result<T::Transform, T::InitError>; type Output = Result<T::Transform, T::InitError>;
#[pin_project::project]
fn poll(mut self: Pin<&mut Self>, cx: &mut Context<'_>) -> Poll<Self::Output> { fn poll(mut self: Pin<&mut Self>, cx: &mut Context<'_>) -> Poll<Self::Output> {
let mut this = self.as_mut().project(); let mut this = self.as_mut().project();
#[project]
match this.state.as_mut().project() { match this.state.as_mut().project() {
ApplyTransformFutureState::A(fut) => match fut.poll(cx)? { ApplyTransformFutureStateProj::A(fut) => match fut.poll(cx)? {
Poll::Ready(srv) => { Poll::Ready(srv) => {
let fut = this.store.0.new_transform(srv); let fut = this.store.0.new_transform(srv);
this.state.set(ApplyTransformFutureState::B(fut)); this.state.set(ApplyTransformFutureState::B(fut));
@ -242,7 +240,7 @@ where
} }
Poll::Pending => Poll::Pending, Poll::Pending => Poll::Pending,
}, },
ApplyTransformFutureState::B(fut) => fut.poll(cx), ApplyTransformFutureStateProj::B(fut) => fut.poll(cx),
} }
} }
} }

View File

@ -25,6 +25,6 @@ either = "1.5.3"
futures-channel = { version = "0.3.4", default-features = false } futures-channel = { version = "0.3.4", default-features = false }
futures-sink = { version = "0.3.4", default-features = false } futures-sink = { version = "0.3.4", default-features = false }
futures-util = { version = "0.3.4", default-features = false } futures-util = { version = "0.3.4", default-features = false }
pin-project = "0.4.6" pin-project = "0.4.17"
log = "0.4" log = "0.4"
slab = "0.4" slab = "0.4"