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 02499fd commit 0f45479
Show file tree
Hide file tree
Showing 4 changed files with 12 additions and 18 deletions.
2 changes: 1 addition & 1 deletion examples/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -141,7 +141,7 @@ hyper = "0.13"
warp = { version = "0.2", default-features = false }
http = "0.2"
http-body = "0.3"
pin-project = "0.4"
pin-project = "0.4.17"
# Health example
tonic-health = { path = "../tonic-health" }
listenfd = "0.3"
Expand Down
16 changes: 6 additions & 10 deletions examples/src/hyper_warp/server.rs
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
use futures::future::{self, Either, TryFutureExt};
use http::version::Version;
use hyper::{service::make_service_fn, Server};
use pin_project::{pin_project, project};
use pin_project::pin_project;
use std::convert::Infallible;
use std::{
pin::Pin,
Expand Down Expand Up @@ -77,7 +77,7 @@ async fn main() -> Result<(), Box<dyn std::error::Error>> {
Ok(())
}

#[pin_project]
#[pin_project(project = EitherBodyProj)]
enum EitherBody<A, B> {
Left(#[pin] A),
Right(#[pin] B),
Expand All @@ -100,27 +100,23 @@ where
}
}

#[project]
fn poll_data(
self: Pin<&mut Self>,
cx: &mut Context<'_>,
) -> Poll<Option<Result<Self::Data, Self::Error>>> {
#[project]
match self.project() {
EitherBody::Left(b) => b.poll_data(cx).map(map_option_err),
EitherBody::Right(b) => b.poll_data(cx).map(map_option_err),
EitherBodyProj::Left(b) => b.poll_data(cx).map(map_option_err),
EitherBodyProj::Right(b) => b.poll_data(cx).map(map_option_err),
}
}

#[project]
fn poll_trailers(
self: Pin<&mut Self>,
cx: &mut Context<'_>,
) -> Poll<Result<Option<http::HeaderMap>, Self::Error>> {
#[project]
match self.project() {
EitherBody::Left(b) => b.poll_trailers(cx).map_err(Into::into),
EitherBody::Right(b) => b.poll_trailers(cx).map_err(Into::into),
EitherBodyProj::Left(b) => b.poll_trailers(cx).map_err(Into::into),
EitherBodyProj::Right(b) => b.poll_trailers(cx).map_err(Into::into),
}
}
}
Expand Down
2 changes: 1 addition & 1 deletion tonic/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -54,7 +54,7 @@ tower-service = "0.3"
tokio-util = { version = "0.3", features = ["codec"] }
async-stream = "0.2"
http-body = "0.3"
pin-project = "0.4"
pin-project = "0.4.17"

# prost
prost1 = { package = "prost", version = "0.6", optional = true }
Expand Down
10 changes: 4 additions & 6 deletions tonic/src/transport/service/reconnect.rs
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
use crate::Error;
use pin_project::{pin_project, project};
use pin_project::pin_project;
use std::fmt;
use std::{
future::Future,
Expand Down Expand Up @@ -161,7 +161,7 @@ pub(crate) struct ResponseFuture<F, E> {
inner: Inner<F, E>,
}

#[pin_project]
#[pin_project(project = InnerProj)]
#[derive(Debug)]
enum Inner<F, E> {
Future(#[pin] F),
Expand Down Expand Up @@ -190,14 +190,12 @@ where
{
type Output = Result<T, Error>;

#[project]
fn poll(self: Pin<&mut Self>, cx: &mut Context<'_>) -> Poll<Self::Output> {
//self.project().inner.poll(cx).map_err(Into::into)
let me = self.project();
#[project]
match me.inner.project() {
Inner::Future(fut) => fut.poll(cx).map_err(Into::into),
Inner::Error(e) => {
InnerProj::Future(fut) => fut.poll(cx).map_err(Into::into),
InnerProj::Error(e) => {
let e = e.take().expect("Polled after ready.").into();
Poll::Ready(Err(e))
}
Expand Down

0 comments on commit 0f45479

Please sign in to comment.