diff --git a/tests/compression/Cargo.toml b/tests/compression/Cargo.toml index c795d0868..3331be78c 100644 --- a/tests/compression/Cargo.toml +++ b/tests/compression/Cargo.toml @@ -8,7 +8,6 @@ version = "0.1.0" [dependencies] bytes = "1" -futures-core = "0.3" http = "0.2" http-body = "0.4" hyper = "0.14.3" diff --git a/tests/compression/src/util.rs b/tests/compression/src/util.rs index 57c3f7dbf..a8d652adc 100644 --- a/tests/compression/src/util.rs +++ b/tests/compression/src/util.rs @@ -1,6 +1,5 @@ use super::*; use bytes::Bytes; -use futures_core::ready; use http_body::Body; use pin_project::pin_project; use std::{ @@ -9,7 +8,7 @@ use std::{ atomic::{AtomicUsize, Ordering::SeqCst}, Arc, }, - task::{Context, Poll}, + task::{ready, Context, Poll}, }; use tokio::io::{AsyncRead, AsyncWrite, ReadBuf}; use tonic::transport::{server::Connected, Channel}; diff --git a/tonic-web/Cargo.toml b/tonic-web/Cargo.toml index 059961ba4..74ccf20d7 100644 --- a/tonic-web/Cargo.toml +++ b/tonic-web/Cargo.toml @@ -17,7 +17,6 @@ version = "0.9.2" [dependencies] base64 = "0.21" bytes = "1.0" -futures-core = "0.3" tokio-stream = "0.1" http = "0.2" http-body = "0.4" diff --git a/tonic-web/src/call.rs b/tonic-web/src/call.rs index ad6474ed2..c53c99720 100644 --- a/tonic-web/src/call.rs +++ b/tonic-web/src/call.rs @@ -1,10 +1,9 @@ use std::error::Error; use std::pin::Pin; -use std::task::{Context, Poll}; +use std::task::{ready, Context, Poll}; use base64::Engine as _; use bytes::{Buf, BufMut, Bytes, BytesMut}; -use futures_core::ready; use http::{header, HeaderMap, HeaderName, HeaderValue}; use http_body::{Body, SizeHint}; use pin_project::pin_project; diff --git a/tonic-web/src/client.rs b/tonic-web/src/client.rs index f3fe8d993..774fe5fdd 100644 --- a/tonic-web/src/client.rs +++ b/tonic-web/src/client.rs @@ -1,5 +1,4 @@ use bytes::Bytes; -use futures_core::ready; use http::header::CONTENT_TYPE; use http::{Request, Response, Version}; use http_body::Body; @@ -7,7 +6,7 @@ use pin_project::pin_project; use std::error::Error; use std::future::Future; use std::pin::Pin; -use std::task::{Context, Poll}; +use std::task::{ready, Context, Poll}; use tower_layer::Layer; use tower_service::Service; use tracing::debug; diff --git a/tonic-web/src/service.rs b/tonic-web/src/service.rs index ee3428e34..af4c5276f 100644 --- a/tonic-web/src/service.rs +++ b/tonic-web/src/service.rs @@ -1,7 +1,6 @@ -use futures_core::ready; use std::future::Future; use std::pin::Pin; -use std::task::{Context, Poll}; +use std::task::{ready, Context, Poll}; use http::{header, HeaderMap, HeaderValue, Method, Request, Response, StatusCode, Version}; use hyper::Body; diff --git a/tonic/Cargo.toml b/tonic/Cargo.toml index 65ca5914f..8c693baab 100644 --- a/tonic/Cargo.toml +++ b/tonic/Cargo.toml @@ -37,7 +37,8 @@ transport = [ "channel", "dep:h2", "dep:hyper", - "tokio", + "tokio/net", + "tokio/time", "dep:tower", "dep:hyper-timeout", ] @@ -50,10 +51,10 @@ channel = [] [dependencies] base64 = "0.21" bytes = "1.0" -futures-util = {version = "0.3", default-features = false} http = "0.2" tracing = "0.1" +tokio = "1.0.1" http-body = "0.4.4" percent-encoding = "2.1" pin-project = "1.0.11" @@ -70,7 +71,6 @@ async-trait = {version = "0.1.13", optional = true} h2 = {version = "0.3.17", optional = true} hyper = {version = "0.14.14", features = ["full"], optional = true} hyper-timeout = {version = "0.4", optional = true} -tokio = {version = "1.0.1", features = ["net", "time"], optional = true} tokio-stream = "0.1" tower = {version = "0.4.7", default-features = false, features = ["balance", "buffer", "discover", "limit", "load", "make", "timeout", "util"], optional = true} axum = {version = "0.6.9", default_features = false, optional = true} diff --git a/tonic/src/client/grpc.rs b/tonic/src/client/grpc.rs index 4e097e4dd..0d52fb42f 100644 --- a/tonic/src/client/grpc.rs +++ b/tonic/src/client/grpc.rs @@ -6,13 +6,12 @@ use crate::{ request::SanitizeHeaders, Code, Request, Response, Status, }; -use futures_util::future; use http::{ header::{HeaderValue, CONTENT_TYPE, TE}, uri::{Parts, PathAndQuery, Uri}, }; use http_body::Body; -use std::fmt; +use std::{fmt, future}; use tokio_stream::{Stream, StreamExt}; /// A gRPC client dispatcher. @@ -240,7 +239,7 @@ impl Grpc { let (mut parts, body, extensions) = self.streaming(request, path, codec).await?.into_parts(); - futures_util::pin_mut!(body); + tokio::pin!(body); let message = body .try_next() diff --git a/tonic/src/codec/decode.rs b/tonic/src/codec/decode.rs index 963974157..4c1068271 100644 --- a/tonic/src/codec/decode.rs +++ b/tonic/src/codec/decode.rs @@ -2,12 +2,12 @@ use super::compression::{decompress, CompressionEncoding}; use super::{DecodeBuf, Decoder, DEFAULT_MAX_RECV_MESSAGE_SIZE, HEADER_SIZE}; use crate::{body::BoxBody, metadata::MetadataMap, Code, Status}; use bytes::{Buf, BufMut, BytesMut}; -use futures_util::{future, ready}; use http::StatusCode; use http_body::Body; use std::{ - fmt, + fmt, future, pin::Pin, + task::ready, task::{Context, Poll}, }; use tokio_stream::Stream; diff --git a/tonic/src/codec/encode.rs b/tonic/src/codec/encode.rs index 1d482901b..f335a6140 100644 --- a/tonic/src/codec/encode.rs +++ b/tonic/src/codec/encode.rs @@ -2,13 +2,12 @@ use super::compression::{compress, CompressionEncoding, SingleMessageCompression use super::{EncodeBuf, Encoder, DEFAULT_MAX_SEND_MESSAGE_SIZE, HEADER_SIZE}; use crate::{Code, Status}; use bytes::{BufMut, Bytes, BytesMut}; -use futures_util::ready; use http::HeaderMap; use http_body::Body; use pin_project::pin_project; use std::{ pin::Pin, - task::{Context, Poll}, + task::{ready, Context, Poll}, }; use tokio_stream::{Stream, StreamExt}; diff --git a/tonic/src/codec/prost.rs b/tonic/src/codec/prost.rs index 7f5b02e9d..47e736a71 100644 --- a/tonic/src/codec/prost.rs +++ b/tonic/src/codec/prost.rs @@ -165,7 +165,7 @@ mod tests { None, ); - futures_util::pin_mut!(body); + tokio::pin!(body); while let Some(r) = body.data().await { r.unwrap(); @@ -189,7 +189,7 @@ mod tests { Some(MAX_MESSAGE_SIZE), ); - futures_util::pin_mut!(body); + tokio::pin!(body); assert!(body.data().await.is_none()); assert_eq!( @@ -223,7 +223,7 @@ mod tests { Some(usize::MAX), ); - futures_util::pin_mut!(body); + tokio::pin!(body); assert!(body.data().await.is_none()); assert_eq!( diff --git a/tonic/src/server/grpc.rs b/tonic/src/server/grpc.rs index e8c13b83d..d8ec2a89c 100644 --- a/tonic/src/server/grpc.rs +++ b/tonic/src/server/grpc.rs @@ -382,7 +382,7 @@ where self.max_decoding_message_size, ); - futures_util::pin_mut!(stream); + tokio::pin!(stream); let message = stream .try_next() diff --git a/tonic/src/transport/channel/mod.rs b/tonic/src/transport/channel/mod.rs index 1eabed27b..b510a6980 100644 --- a/tonic/src/transport/channel/mod.rs +++ b/tonic/src/transport/channel/mod.rs @@ -23,7 +23,7 @@ use std::{ future::Future, hash::Hash, pin::Pin, - task::{Context, Poll}, + task::{ready, Context, Poll}, }; use tokio::{ io::{AsyncRead, AsyncWrite}, @@ -220,8 +220,7 @@ impl Future for ResponseFuture { type Output = Result, super::Error>; fn poll(mut self: Pin<&mut Self>, cx: &mut Context<'_>) -> Poll { - let val = futures_util::ready!(Pin::new(&mut self.inner).poll(cx)) - .map_err(super::Error::from_source)?; + let val = ready!(Pin::new(&mut self.inner).poll(cx)).map_err(super::Error::from_source)?; Ok(val).into() } } diff --git a/tonic/src/transport/server/incoming.rs b/tonic/src/transport/server/incoming.rs index 09711eee7..61aadc93d 100644 --- a/tonic/src/transport/server/incoming.rs +++ b/tonic/src/transport/server/incoming.rs @@ -26,7 +26,7 @@ where IE: Into, { async_stream::try_stream! { - futures_util::pin_mut!(incoming); + tokio::pin!(incoming); while let Some(item) = incoming.next().await { yield item.map(ServerIo::new_io)? @@ -44,7 +44,7 @@ where IE: Into, { async_stream::try_stream! { - futures_util::pin_mut!(incoming); + tokio::pin!(incoming); let mut tasks = tokio::task::JoinSet::new(); diff --git a/tonic/src/transport/server/mod.rs b/tonic/src/transport/server/mod.rs index 38ecb383c..7c9e94635 100644 --- a/tonic/src/transport/server/mod.rs +++ b/tonic/src/transport/server/mod.rs @@ -38,7 +38,6 @@ use self::recover_error::RecoverError; use super::service::{GrpcTimeout, ServerIo}; use crate::body::BoxBody; use bytes::Bytes; -use futures_util::ready; use http::{Request, Response}; use http_body::Body as _; use hyper::{server::accept, Body}; @@ -51,7 +50,7 @@ use std::{ net::SocketAddr, pin::Pin, sync::Arc, - task::{Context, Poll}, + task::{ready, Context, Poll}, time::Duration, }; use tokio::io::{AsyncRead, AsyncWrite}; diff --git a/tonic/src/transport/server/recover_error.rs b/tonic/src/transport/server/recover_error.rs index b7a80814a..6d7e55bf4 100644 --- a/tonic/src/transport/server/recover_error.rs +++ b/tonic/src/transport/server/recover_error.rs @@ -1,11 +1,10 @@ use crate::Status; -use futures_util::ready; use http::Response; use pin_project::pin_project; use std::{ future::Future, pin::Pin, - task::{Context, Poll}, + task::{ready, Context, Poll}, }; use tower::Service; diff --git a/tonic/src/transport/service/grpc_timeout.rs b/tonic/src/transport/service/grpc_timeout.rs index 5ae46cc18..1858cdf5f 100644 --- a/tonic/src/transport/service/grpc_timeout.rs +++ b/tonic/src/transport/service/grpc_timeout.rs @@ -5,7 +5,7 @@ use std::{ fmt, future::Future, pin::Pin, - task::{Context, Poll}, + task::{ready, Context, Poll}, time::Duration, }; use tokio::time::Sleep; @@ -89,7 +89,7 @@ where } if let Some(sleep) = this.sleep.as_pin_mut() { - futures_util::ready!(sleep.poll(cx)); + ready!(sleep.poll(cx)); return Poll::Ready(Err(TimeoutExpired(()).into())); } diff --git a/tonic/src/transport/service/router.rs b/tonic/src/transport/service/router.rs index 7b7b0b4f7..85636c4d4 100644 --- a/tonic/src/transport/service/router.rs +++ b/tonic/src/transport/service/router.rs @@ -10,7 +10,7 @@ use std::{ fmt, future::Future, pin::Pin, - task::{Context, Poll}, + task::{ready, Context, Poll}, }; use tower::ServiceExt; use tower_service::Service; @@ -131,7 +131,7 @@ impl Future for RoutesFuture { type Output = Result, crate::Error>; fn poll(self: Pin<&mut Self>, cx: &mut Context<'_>) -> Poll { - match futures_util::ready!(self.project().0.poll(cx)) { + match ready!(self.project().0.poll(cx)) { Ok(res) => Ok(res.map(boxed)).into(), Err(err) => match err {}, }