Skip to content

Commit

Permalink
Remove uses of pin_project::project attribute
Browse files Browse the repository at this point in the history
pin-project will deprecate the project attribute due to some unfixable
limitations.

Refs: taiki-e/pin-project#225
  • Loading branch information
taiki-e committed Jun 5, 2020
1 parent 755a8bb commit 9528df4
Show file tree
Hide file tree
Showing 11 changed files with 37 additions and 54 deletions.
2 changes: 1 addition & 1 deletion actix-codec/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -24,4 +24,4 @@ futures-sink = { version = "0.3.4", default-features = false }
tokio = { version = "0.2.4", default-features=false }
tokio-util = { version = "0.2.0", default-features=false, features=["codec"] }
log = "0.4"
pin-project = "0.4.8"
pin-project = "0.4.17"
2 changes: 1 addition & 1 deletion actix-ioframe/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ bytes = "0.5.3"
either = "1.5.3"
futures-sink = { 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"

[dev-dependencies]
Expand Down
11 changes: 4 additions & 7 deletions actix-ioframe/src/service.rs
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,6 @@ use actix_codec::{AsyncRead, AsyncWrite, Decoder, Encoder, Framed};
use actix_service::{IntoService, IntoServiceFactory, Service, ServiceFactory};
use either::Either;
use futures_core::{ready, stream::Stream};
use pin_project::project;

use crate::connect::{Connect, ConnectResult};
use crate::dispatcher::Dispatcher;
Expand Down Expand Up @@ -336,7 +335,7 @@ where
}
}

#[pin_project::pin_project]
#[pin_project::pin_project(project = FramedServiceImplResponseInnerProj)]
enum FramedServiceImplResponseInner<St, Io, Codec, Out, C, T>
where
C: Service<Request = Connect<Io, Codec>, Response = ConnectResult<Io, St, Codec, Out>>,
Expand Down Expand Up @@ -378,17 +377,15 @@ where
<Codec as Encoder>::Error: std::fmt::Debug,
Out: Stream<Item = <Codec as Encoder>::Item> + Unpin,
{
#[project]
fn poll(
self: Pin<&mut Self>,
cx: &mut Context<'_>,
) -> Either<
FramedServiceImplResponseInner<St, Io, Codec, Out, C, T>,
Poll<Result<(), ServiceError<C::Error, Codec>>>,
> {
#[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(
handler.new_service(res.state),
Some(res.framed),
Expand All @@ -397,7 +394,7 @@ where
Poll::Pending => Either::Right(Poll::Pending),
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) {
Poll::Ready(Ok(handler)) => {
Either::Left(FramedServiceImplResponseInner::Dispatcher(
Expand All @@ -408,7 +405,7 @@ where
Poll::Ready(Err(e)) => Either::Right(Poll::Ready(Err(e.into()))),
}
}
FramedServiceImplResponseInner::Dispatcher(fut) => {
FramedServiceImplResponseInnerProj::Dispatcher(fut) => {
Either::Right(fut.poll(cx))
}
}
Expand Down
2 changes: 1 addition & 1 deletion actix-service/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ path = "src/lib.rs"

[dependencies]
futures-util = "0.3.1"
pin-project = "0.4.6"
pin-project = "0.4.17"

[dev-dependencies]
actix-rt = "1.0.0"
Expand Down
24 changes: 10 additions & 14 deletions actix-service/benches/and_then.rs
Original file line number Diff line number Diff line change
Expand Up @@ -81,7 +81,7 @@ where
state: State<A, B>,
}

#[pin_project::pin_project]
#[pin_project::pin_project(project = StateProj)]
enum State<A, B>
where
A: Service,
Expand All @@ -99,13 +99,11 @@ where
{
type Output = Result<B::Response, A::Error>;

#[pin_project::project]
fn poll(mut self: Pin<&mut Self>, cx: &mut Context<'_>) -> Poll<Self::Output> {
let mut this = self.as_mut().project();

#[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) => {
let b = b.take().unwrap();
this.state.set(State::Empty); // drop fut A
Expand All @@ -115,11 +113,11 @@ where
}
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);
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`"),
}
}
}
Expand Down Expand Up @@ -179,7 +177,7 @@ where
state: StateRC<A, B>,
}

#[pin_project::pin_project]
#[pin_project::pin_project(project = StateRCProj)]
enum StateRC<A, B>
where
A: Service,
Expand All @@ -196,14 +194,12 @@ where
B: Service<Request = A::Response, Error = 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> {
let mut this = self.as_mut().project();

#[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) => {
let b = b.take().unwrap();
this.state.set(StateRC::Empty); // drop fut A
Expand All @@ -213,11 +209,11 @@ where
}
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);
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`"),
}
}
}
Expand Down
10 changes: 4 additions & 6 deletions actix-service/src/and_then.rs
Original file line number Diff line number Diff line change
Expand Up @@ -66,7 +66,7 @@ where
state: State<A, B>,
}

#[pin_project::pin_project]
#[pin_project::pin_project(project = StateProj)]
enum State<A, B>
where
A: Service,
Expand All @@ -84,13 +84,11 @@ where
{
type Output = Result<B::Response, A::Error>;

#[pin_project::project]
fn poll(mut self: Pin<&mut Self>, cx: &mut Context<'_>) -> Poll<Self::Output> {
let mut this = self.as_mut().project();

#[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) => {
let mut b = b.take().unwrap();
this.state.set(State::Empty); // drop fut A
Expand All @@ -100,11 +98,11 @@ where
}
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);
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`"),
}
}
}
Expand Down
10 changes: 4 additions & 6 deletions actix-service/src/and_then_apply_fn.rs
Original file line number Diff line number Diff line change
Expand Up @@ -98,7 +98,7 @@ where
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>
where
A: Service,
Expand All @@ -123,13 +123,11 @@ where
{
type Output = Result<Res, Err>;

#[pin_project::project]
fn poll(mut self: Pin<&mut Self>, cx: &mut Context<'_>) -> Poll<Self::Output> {
let mut this = self.as_mut().project();

#[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) => {
let mut b = b.take().unwrap();
this.state.set(State::Empty);
Expand All @@ -140,11 +138,11 @@ where
}
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);
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`"),
}
}
}
Expand Down
10 changes: 4 additions & 6 deletions actix-service/src/apply_cfg.rs
Original file line number Diff line number Diff line change
Expand Up @@ -177,7 +177,7 @@ where
state: State<T, R, S>,
}

#[pin_project::pin_project]
#[pin_project::pin_project(project = StateProj)]
enum State<T, R, S>
where
T: ServiceFactory<Config = ()>,
Expand All @@ -200,28 +200,26 @@ where
{
type Output = Result<S, T::InitError>;

#[pin_project::project]
fn poll(mut self: Pin<&mut Self>, cx: &mut Context<'_>) -> Poll<Self::Output> {
let mut this = self.as_mut().project();

#[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::Ready(srv) => {
this.state.set(State::B(srv));
self.poll(cx)
}
},
State::B(srv) => match srv.poll_ready(cx)? {
StateProj::B(srv) => match srv.poll_ready(cx)? {
Poll::Ready(_) => {
let fut = (this.store.get_mut().1)(this.cfg.take().unwrap(), srv);
this.state.set(State::C(fut));
self.poll(cx)
}
Poll::Pending => Poll::Pending,
},
State::C(fut) => fut.poll(cx),
StateProj::C(fut) => fut.poll(cx),
}
}
}
10 changes: 4 additions & 6 deletions actix-service/src/then.rs
Original file line number Diff line number Diff line change
Expand Up @@ -66,7 +66,7 @@ where
state: State<A, B>,
}

#[pin_project::pin_project]
#[pin_project::pin_project(project = StateProj)]
enum State<A, B>
where
A: Service,
Expand All @@ -84,13 +84,11 @@ where
{
type Output = Result<B::Response, B::Error>;

#[pin_project::project]
fn poll(mut self: Pin<&mut Self>, cx: &mut Context<'_>) -> Poll<Self::Output> {
let mut this = self.as_mut().project();

#[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) => {
let mut b = b.take().unwrap();
this.state.set(State::Empty); // drop fut A
Expand All @@ -100,11 +98,11 @@ where
}
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);
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`"),
}
}
}
Expand Down
8 changes: 3 additions & 5 deletions actix-service/src/transform.rs
Original file line number Diff line number Diff line change
Expand Up @@ -211,7 +211,7 @@ where
state: ApplyTransformFutureState<T, S>,
}

#[pin_project::pin_project]
#[pin_project::pin_project(project = ApplyTransformFutureStateProj)]
pub enum ApplyTransformFutureState<T, S>
where
S: ServiceFactory,
Expand All @@ -228,21 +228,19 @@ where
{
type Output = Result<T::Transform, T::InitError>;

#[pin_project::project]
fn poll(mut self: Pin<&mut Self>, cx: &mut Context<'_>) -> Poll<Self::Output> {
let mut this = self.as_mut().project();

#[project]
match this.state.as_mut().project() {
ApplyTransformFutureState::A(fut) => match fut.poll(cx)? {
ApplyTransformFutureStateProj::A(fut) => match fut.poll(cx)? {
Poll::Ready(srv) => {
let fut = this.store.0.new_transform(srv);
this.state.set(ApplyTransformFutureState::B(fut));
self.poll(cx)
}
Poll::Pending => Poll::Pending,
},
ApplyTransformFutureState::B(fut) => fut.poll(cx),
ApplyTransformFutureStateProj::B(fut) => fut.poll(cx),
}
}
}
2 changes: 1 addition & 1 deletion actix-utils/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,6 @@ either = "1.5.3"
futures-channel = { 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 }
pin-project = "0.4.6"
pin-project = "0.4.17"
log = "0.4"
slab = "0.4"

0 comments on commit 9528df4

Please sign in to comment.