From f089e7a090c558fd22b02db362061988591e8a41 Mon Sep 17 00:00:00 2001 From: tottoto Date: Tue, 14 Nov 2023 00:11:41 +0900 Subject: [PATCH 1/5] chore: Refactor use of tokio-stream (#1560) --- examples/src/mock/mock.rs | 2 +- interop/src/client.rs | 6 +++--- interop/src/server.rs | 2 +- tests/compression/src/bidirectional_stream.rs | 2 +- tests/compression/src/client_stream.rs | 11 +++++------ tests/compression/src/compressing_request.rs | 6 +++--- tests/compression/src/compressing_response.rs | 17 ++++++++--------- tests/compression/src/server_stream.rs | 6 +++--- .../integration_tests/tests/max_message_size.rs | 4 ++-- tests/integration_tests/tests/routes_builder.rs | 2 +- tonic-reflection/tests/server.rs | 2 +- 11 files changed, 29 insertions(+), 31 deletions(-) diff --git a/examples/src/mock/mock.rs b/examples/src/mock/mock.rs index 87f5fc6ba..0d3754921 100644 --- a/examples/src/mock/mock.rs +++ b/examples/src/mock/mock.rs @@ -23,7 +23,7 @@ async fn main() -> Result<(), Box> { tokio::spawn(async move { Server::builder() .add_service(GreeterServer::new(greeter)) - .serve_with_incoming(tokio_stream::iter(vec![Ok::<_, std::io::Error>(server)])) + .serve_with_incoming(tokio_stream::once(Ok::<_, std::io::Error>(server))) .await }); diff --git a/interop/src/client.rs b/interop/src/client.rs index aa5a9a93f..389264684 100644 --- a/interop/src/client.rs +++ b/interop/src/client.rs @@ -207,7 +207,7 @@ pub async fn ping_pong(client: &mut TestClient, assertions: &mut Vec) { - let stream = tokio_stream::iter(Vec::new()); + let stream = tokio_stream::empty(); let result = client.full_duplex_call(Request::new(stream)).await; assertions.push(test_assert!( @@ -270,7 +270,7 @@ pub async fn status_code_and_message(client: &mut TestClient, assertions: &mut V let result = client.unary_call(Request::new(simple_req)).await; validate_response(result, assertions); - let stream = tokio_stream::iter(vec![duplex_req]); + let stream = tokio_stream::once(duplex_req); let result = match client.full_duplex_call(Request::new(stream)).await { Ok(response) => { let stream = response.into_inner(); @@ -356,7 +356,7 @@ pub async fn custom_metadata(client: &mut TestClient, assertions: &mut Vec(server)])) + .serve_with_incoming(tokio_stream::once(Ok::<_, std::io::Error>(server))) .await .unwrap(); } diff --git a/tests/compression/src/client_stream.rs b/tests/compression/src/client_stream.rs index 99d72751b..9c210c574 100644 --- a/tests/compression/src/client_stream.rs +++ b/tests/compression/src/client_stream.rs @@ -29,7 +29,7 @@ async fn client_enabled_server_enabled() { .into_inner(), ) .add_service(svc) - .serve_with_incoming(tokio_stream::iter(vec![Ok::<_, std::io::Error>(server)])) + .serve_with_incoming(tokio_stream::once(Ok::<_, std::io::Error>(server))) .await .unwrap(); } @@ -75,7 +75,7 @@ async fn client_disabled_server_enabled() { .into_inner(), ) .add_service(svc) - .serve_with_incoming(tokio_stream::iter(vec![Ok::<_, std::io::Error>(server)])) + .serve_with_incoming(tokio_stream::once(Ok::<_, std::io::Error>(server))) .await .unwrap(); } @@ -102,7 +102,7 @@ async fn client_enabled_server_disabled() { tokio::spawn(async move { Server::builder() .add_service(svc) - .serve_with_incoming(tokio_stream::iter(vec![Ok::<_, std::io::Error>(server)])) + .serve_with_incoming(tokio_stream::once(Ok::<_, std::io::Error>(server))) .await .unwrap(); }); @@ -147,7 +147,7 @@ async fn compressing_response_from_client_stream() { .into_inner(), ) .add_service(svc) - .serve_with_incoming(tokio_stream::iter(vec![Ok::<_, std::io::Error>(server)])) + .serve_with_incoming(tokio_stream::once(Ok::<_, std::io::Error>(server))) .await .unwrap(); } @@ -156,8 +156,7 @@ async fn compressing_response_from_client_stream() { let mut client = test_client::TestClient::new(mock_io_channel(client).await) .accept_compressed(CompressionEncoding::Gzip); - let stream = tokio_stream::iter(vec![]); - let req = Request::new(Box::pin(stream)); + let req = Request::new(Box::pin(tokio_stream::empty())); let res = client.compress_output_client_stream(req).await.unwrap(); assert_eq!(res.metadata().get("grpc-encoding").unwrap(), "gzip"); diff --git a/tests/compression/src/compressing_request.rs b/tests/compression/src/compressing_request.rs index 7cdfd7cec..b1c9009b8 100644 --- a/tests/compression/src/compressing_request.rs +++ b/tests/compression/src/compressing_request.rs @@ -31,7 +31,7 @@ async fn client_enabled_server_enabled() { .into_inner(), ) .add_service(svc) - .serve_with_incoming(tokio_stream::iter(vec![Ok::<_, std::io::Error>(server)])) + .serve_with_incoming(tokio_stream::once(Ok::<_, std::io::Error>(server))) .await .unwrap(); } @@ -61,7 +61,7 @@ async fn client_enabled_server_disabled() { tokio::spawn(async move { Server::builder() .add_service(svc) - .serve_with_incoming(tokio_stream::iter(vec![Ok::<_, std::io::Error>(server)])) + .serve_with_incoming(tokio_stream::once(Ok::<_, std::io::Error>(server))) .await .unwrap(); }); @@ -99,7 +99,7 @@ async fn client_mark_compressed_without_header_server_enabled() { async move { Server::builder() .add_service(svc) - .serve_with_incoming(tokio_stream::iter(vec![Ok::<_, std::io::Error>(server)])) + .serve_with_incoming(tokio_stream::once(Ok::<_, std::io::Error>(server))) .await .unwrap(); } diff --git a/tests/compression/src/compressing_response.rs b/tests/compression/src/compressing_response.rs index cc5d4f4cd..a9b73e6d9 100644 --- a/tests/compression/src/compressing_response.rs +++ b/tests/compression/src/compressing_response.rs @@ -53,7 +53,7 @@ async fn client_enabled_server_enabled() { .into_inner(), ) .add_service(svc) - .serve_with_incoming(tokio_stream::iter(vec![Ok::<_, std::io::Error>(server)])) + .serve_with_incoming(tokio_stream::once(Ok::<_, std::io::Error>(server))) .await .unwrap(); } @@ -94,7 +94,7 @@ async fn client_enabled_server_disabled() { .into_inner(), ) .add_service(svc) - .serve_with_incoming(tokio_stream::iter(vec![Ok::<_, std::io::Error>(server)])) + .serve_with_incoming(tokio_stream::once(Ok::<_, std::io::Error>(server))) .await .unwrap(); } @@ -160,7 +160,7 @@ async fn client_disabled() { .into_inner(), ) .add_service(svc) - .serve_with_incoming(tokio_stream::iter(vec![Ok::<_, std::io::Error>(server)])) + .serve_with_incoming(tokio_stream::once(Ok::<_, std::io::Error>(server))) .await .unwrap(); } @@ -198,7 +198,7 @@ async fn server_replying_with_unsupported_encoding() { .into_inner(), ) .add_service(svc) - .serve_with_incoming(tokio_stream::iter(vec![Ok::<_, std::io::Error>(server)])) + .serve_with_incoming(tokio_stream::once(Ok::<_, std::io::Error>(server))) .await .unwrap(); }); @@ -240,7 +240,7 @@ async fn disabling_compression_on_single_response() { .into_inner(), ) .add_service(svc) - .serve_with_incoming(tokio_stream::iter(vec![Ok::<_, std::io::Error>(server)])) + .serve_with_incoming(tokio_stream::once(Ok::<_, std::io::Error>(server))) .await .unwrap(); } @@ -281,7 +281,7 @@ async fn disabling_compression_on_response_but_keeping_compression_on_stream() { .into_inner(), ) .add_service(svc) - .serve_with_incoming(tokio_stream::iter(vec![Ok::<_, std::io::Error>(server)])) + .serve_with_incoming(tokio_stream::once(Ok::<_, std::io::Error>(server))) .await .unwrap(); } @@ -337,7 +337,7 @@ async fn disabling_compression_on_response_from_client_stream() { .into_inner(), ) .add_service(svc) - .serve_with_incoming(tokio_stream::iter(vec![Ok::<_, std::io::Error>(server)])) + .serve_with_incoming(tokio_stream::once(Ok::<_, std::io::Error>(server))) .await .unwrap(); } @@ -346,8 +346,7 @@ async fn disabling_compression_on_response_from_client_stream() { let mut client = test_client::TestClient::new(mock_io_channel(client).await) .accept_compressed(CompressionEncoding::Gzip); - let stream = tokio_stream::iter(vec![]); - let req = Request::new(Box::pin(stream)); + let req = Request::new(Box::pin(tokio_stream::empty())); let res = client.compress_output_client_stream(req).await.unwrap(); assert_eq!(res.metadata().get("grpc-encoding").unwrap(), "gzip"); diff --git a/tests/compression/src/server_stream.rs b/tests/compression/src/server_stream.rs index 453c055c8..3a7fe7104 100644 --- a/tests/compression/src/server_stream.rs +++ b/tests/compression/src/server_stream.rs @@ -26,7 +26,7 @@ async fn client_enabled_server_enabled() { .into_inner(), ) .add_service(svc) - .serve_with_incoming(tokio_stream::iter(vec![Ok::<_, std::io::Error>(server)])) + .serve_with_incoming(tokio_stream::once(Ok::<_, std::io::Error>(server))) .await .unwrap(); } @@ -80,7 +80,7 @@ async fn client_disabled_server_enabled() { .into_inner(), ) .add_service(svc) - .serve_with_incoming(tokio_stream::iter(vec![Ok::<_, std::io::Error>(server)])) + .serve_with_incoming(tokio_stream::once(Ok::<_, std::io::Error>(server))) .await .unwrap(); } @@ -125,7 +125,7 @@ async fn client_enabled_server_disabled() { .into_inner(), ) .add_service(svc) - .serve_with_incoming(tokio_stream::iter(vec![Ok::<_, std::io::Error>(server)])) + .serve_with_incoming(tokio_stream::once(Ok::<_, std::io::Error>(server))) .await .unwrap(); } diff --git a/tests/integration_tests/tests/max_message_size.rs b/tests/integration_tests/tests/max_message_size.rs index bda1e9d47..9ae524dbc 100644 --- a/tests/integration_tests/tests/max_message_size.rs +++ b/tests/integration_tests/tests/max_message_size.rs @@ -148,7 +148,7 @@ async fn response_stream_limit() { tokio::spawn(async move { Server::builder() .add_service(svc) - .serve_with_incoming(tokio_stream::iter(vec![Ok::<_, std::io::Error>(server)])) + .serve_with_incoming(tokio_stream::once(Ok::<_, std::io::Error>(server))) .await .unwrap(); }); @@ -317,7 +317,7 @@ async fn max_message_run(case: &TestCase) -> Result<(), Status> { tokio::spawn(async move { Server::builder() .add_service(svc) - .serve_with_incoming(tokio_stream::iter(vec![Ok::<_, std::io::Error>(server)])) + .serve_with_incoming(tokio_stream::once(Ok::<_, std::io::Error>(server))) .await .unwrap(); }); diff --git a/tests/integration_tests/tests/routes_builder.rs b/tests/integration_tests/tests/routes_builder.rs index f820be0d1..7bcbfad37 100644 --- a/tests/integration_tests/tests/routes_builder.rs +++ b/tests/integration_tests/tests/routes_builder.rs @@ -43,7 +43,7 @@ async fn multiple_service_using_routes_builder() { let output = Output1 { buf: request.into_inner().buf, }; - let stream = tokio_stream::iter(vec![Ok(output)]); + let stream = tokio_stream::once(Ok(output)); Ok(Response::new(Box::pin(stream))) } diff --git a/tonic-reflection/tests/server.rs b/tonic-reflection/tests/server.rs index 00c98fc8d..ab210d5db 100644 --- a/tonic-reflection/tests/server.rs +++ b/tonic-reflection/tests/server.rs @@ -123,7 +123,7 @@ async fn make_test_reflection_request(request: ServerReflectionRequest) -> Messa .unwrap(); let mut client = ServerReflectionClient::new(conn); - let request = Request::new(tokio_stream::iter(vec![request])); + let request = Request::new(tokio_stream::once(request)); let mut inbound = client .server_reflection_info(request) .await From 680214b5e1d48e831ae5ed9483f3e6b826f121f4 Mon Sep 17 00:00:00 2001 From: shuoer86 <129674997+shuoer86@users.noreply.github.com> Date: Mon, 13 Nov 2023 23:11:54 +0800 Subject: [PATCH 2/5] chore: fix typos (#1563) --- examples/src/richer-error/client.rs | 2 +- examples/src/richer-error/client_vec.rs | 2 +- tonic-build/src/prost.rs | 2 +- tonic-web/src/call.rs | 2 +- tonic/src/lib.rs | 2 +- 5 files changed, 5 insertions(+), 5 deletions(-) diff --git a/examples/src/richer-error/client.rs b/examples/src/richer-error/client.rs index 1fa9ef7e2..3ccf35428 100644 --- a/examples/src/richer-error/client.rs +++ b/examples/src/richer-error/client.rs @@ -46,7 +46,7 @@ async fn main() -> Result<(), Box> { } }; - println!(" Successfull response received.\n\n {:?}\n", response); + println!(" Successful response received.\n\n {:?}\n", response); Ok(()) } diff --git a/examples/src/richer-error/client_vec.rs b/examples/src/richer-error/client_vec.rs index f74aa9f31..c852c61a4 100644 --- a/examples/src/richer-error/client_vec.rs +++ b/examples/src/richer-error/client_vec.rs @@ -52,7 +52,7 @@ async fn main() -> Result<(), Box> { } }; - println!(" Successfull response received.\n\n {:?}\n", response); + println!(" Successful response received.\n\n {:?}\n", response); Ok(()) } diff --git a/tonic-build/src/prost.rs b/tonic-build/src/prost.rs index 1249055d9..3202e2730 100644 --- a/tonic-build/src/prost.rs +++ b/tonic-build/src/prost.rs @@ -506,7 +506,7 @@ impl Builder { /// should be enabled automatically when run from a build script. However, /// the method of detection is not completely reliable since the `CARGO` /// environment variable can have been set by anything else. If writing the - /// instructions to `stdout` is undesireable, you can disable this setting + /// instructions to `stdout` is undesirable, you can disable this setting /// explicitly. pub fn emit_rerun_if_changed(mut self, enable: bool) -> Self { self.emit_rerun_if_changed = enable; diff --git a/tonic-web/src/call.rs b/tonic-web/src/call.rs index b9fd628a5..dd79971c6 100644 --- a/tonic-web/src/call.rs +++ b/tonic-web/src/call.rs @@ -425,7 +425,7 @@ fn make_trailers_frame(trailers: HeaderMap) -> Vec { /// Search some buffer for grpc-web trailers headers and return /// its location in the original buf. If `None` is returned we did /// not find a trailers in this buffer either because its incomplete -/// or the buffer jsut contained grpc message frames. +/// or the buffer just contained grpc message frames. fn find_trailers(buf: &[u8]) -> Result { let mut len = 0; let mut temp_buf = &buf[..]; diff --git a/tonic/src/lib.rs b/tonic/src/lib.rs index 437402a62..8aa80a121 100644 --- a/tonic/src/lib.rs +++ b/tonic/src/lib.rs @@ -58,7 +58,7 @@ //! ## Max Message Size //! //! Currently, both servers and clients can be configured to set the max message encoding and -//! decoding size. This will ensure that an incoming gRPC message will not exahust the systems +//! decoding size. This will ensure that an incoming gRPC message will not exhaust the systems //! memory. By default, the decoding message limit is `4MB` and the encoding limit is `usize::MAX`. //! //! [gRPC]: https://grpc.io From e1fa95e1bba2ea2c762bf51313cef1458ad02ad9 Mon Sep 17 00:00:00 2001 From: tottoto Date: Tue, 14 Nov 2023 00:13:11 +0900 Subject: [PATCH 3/5] chore: Bump msrv to 1.65 (#1549) --- .github/workflows/CI.yml | 2 +- README.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/CI.yml b/.github/workflows/CI.yml index a3ab20a3f..f0ce998fe 100644 --- a/.github/workflows/CI.yml +++ b/.github/workflows/CI.yml @@ -88,7 +88,7 @@ jobs: - uses: actions/checkout@v3 - uses: hecrj/setup-rust-action@v1 with: - rust-version: "1.64" # msrv + rust-version: "1.65" # msrv - name: Install protoc uses: taiki-e/install-action@v2 with: diff --git a/README.md b/README.md index 0f1c1ba18..d32a1a3ee 100644 --- a/README.md +++ b/README.md @@ -45,7 +45,7 @@ For IntelliJ IDEA users, please refer to [this](https://github.com/intellij-rust ### Rust Version -`tonic`'s MSRV is `1.64`. +`tonic`'s MSRV is `1.65`. ```bash $ rustup update From ff71e89349190a15172f5c3902dde2be4fcc0648 Mon Sep 17 00:00:00 2001 From: Xiaoya Wei Date: Mon, 13 Nov 2023 23:14:27 +0800 Subject: [PATCH 4/5] support vectored IO (#1502) Co-authored-by: Lucio Franco --- tests/integration_tests/src/lib.rs | 13 ++++++++++++ tonic/src/transport/service/io.rs | 33 ++++++++++++++++++++++++++++++ 2 files changed, 46 insertions(+) diff --git a/tests/integration_tests/src/lib.rs b/tests/integration_tests/src/lib.rs index 68bf837b6..2d3c3f3f8 100644 --- a/tests/integration_tests/src/lib.rs +++ b/tests/integration_tests/src/lib.rs @@ -5,6 +5,7 @@ pub mod pb { pub mod mock { use std::{ + io::IoSlice, pin::Pin, task::{Context, Poll}, }; @@ -51,6 +52,18 @@ pub mod mock { ) -> Poll> { Pin::new(&mut self.0).poll_shutdown(cx) } + + fn poll_write_vectored( + mut self: Pin<&mut Self>, + cx: &mut Context<'_>, + bufs: &[IoSlice<'_>], + ) -> Poll> { + Pin::new(&mut self.0).poll_write_vectored(cx, bufs) + } + + fn is_write_vectored(&self) -> bool { + self.0.is_write_vectored() + } } } diff --git a/tonic/src/transport/service/io.rs b/tonic/src/transport/service/io.rs index 2b465355f..2230b9b2e 100644 --- a/tonic/src/transport/service/io.rs +++ b/tonic/src/transport/service/io.rs @@ -1,6 +1,7 @@ use crate::transport::server::Connected; use hyper::client::connect::{Connected as HyperConnected, Connection}; use std::io; +use std::io::IoSlice; use std::pin::Pin; use std::task::{Context, Poll}; use tokio::io::{AsyncRead, AsyncWrite, ReadBuf}; @@ -65,6 +66,18 @@ impl AsyncWrite for BoxedIo { fn poll_shutdown(mut self: Pin<&mut Self>, cx: &mut Context<'_>) -> Poll> { Pin::new(&mut self.0).poll_shutdown(cx) } + + fn poll_write_vectored( + mut self: Pin<&mut Self>, + cx: &mut Context<'_>, + bufs: &[IoSlice<'_>], + ) -> Poll> { + Pin::new(&mut self.0).poll_write_vectored(cx, bufs) + } + + fn is_write_vectored(&self) -> bool { + self.0.is_write_vectored() + } } pub(crate) enum ServerIo { @@ -163,4 +176,24 @@ where Self::TlsIo(io) => Pin::new(io).poll_shutdown(cx), } } + + fn poll_write_vectored( + mut self: Pin<&mut Self>, + cx: &mut Context<'_>, + bufs: &[IoSlice<'_>], + ) -> Poll> { + match &mut *self { + Self::Io(io) => Pin::new(io).poll_write_vectored(cx, bufs), + #[cfg(feature = "tls")] + Self::TlsIo(io) => Pin::new(io).poll_write_vectored(cx, bufs), + } + } + + fn is_write_vectored(&self) -> bool { + match self { + Self::Io(io) => io.is_write_vectored(), + #[cfg(feature = "tls")] + Self::TlsIo(io) => io.is_write_vectored(), + } + } } From 522a8d74f8a948d48cb6b5ae0f591d02388e930d Mon Sep 17 00:00:00 2001 From: tottoto Date: Tue, 14 Nov 2023 00:14:49 +0900 Subject: [PATCH 5/5] chore: Fix clippy warning (#1500) Co-authored-by: Lucio Franco --- codegen/src/main.rs | 12 ++++++------ examples/src/dynamic/server.rs | 10 ++-------- tonic-build/src/server.rs | 2 ++ tonic-web/src/call.rs | 8 ++++---- tonic-web/tests/integration/tests/grpc.rs | 2 +- tonic-web/tests/integration/tests/grpc_web.rs | 4 ++-- tonic/src/codec/encode.rs | 4 ++-- tonic/src/codec/prost.rs | 1 - tonic/src/metadata/value.rs | 2 +- tonic/src/status.rs | 2 +- 10 files changed, 21 insertions(+), 26 deletions(-) diff --git a/codegen/src/main.rs b/codegen/src/main.rs index 4b88039a1..7659ad93d 100644 --- a/codegen/src/main.rs +++ b/codegen/src/main.rs @@ -1,4 +1,4 @@ -use std::path::PathBuf; +use std::path::{Path, PathBuf}; fn main() { // tonic-health @@ -45,11 +45,11 @@ fn main() { } fn codegen( - root_dir: &PathBuf, + root_dir: &Path, iface_files: &[&str], include_dirs: &[&str], - out_dir: &PathBuf, - file_descriptor_set_path: &PathBuf, + out_dir: &Path, + file_descriptor_set_path: &Path, build_client: bool, build_server: bool, ) { @@ -59,12 +59,12 @@ fn codegen( .unwrap(); let iface_files: Vec = iface_files - .into_iter() + .iter() .map(|&path| root_dir.join(path)) .collect(); let include_dirs: Vec = include_dirs - .into_iter() + .iter() .map(|&path| root_dir.join(path)) .collect(); let out_dir = root_dir.join(out_dir); diff --git a/examples/src/dynamic/server.rs b/examples/src/dynamic/server.rs index e25c7e8ae..300ec868c 100644 --- a/examples/src/dynamic/server.rs +++ b/examples/src/dynamic/server.rs @@ -32,10 +32,7 @@ impl Echo for MyEcho { } fn init_echo(args: &[String], builder: &mut RoutesBuilder) { - let enabled = args - .into_iter() - .find(|arg| arg.as_str() == "echo") - .is_some(); + let enabled = args.iter().any(|arg| arg.as_str() == "echo"); if enabled { println!("Adding Echo service..."); let svc = EchoServer::new(MyEcho::default()); @@ -62,10 +59,7 @@ impl Greeter for MyGreeter { } fn init_greeter(args: &[String], builder: &mut RoutesBuilder) { - let enabled = args - .into_iter() - .find(|arg| arg.as_str() == "greeter") - .is_some(); + let enabled = args.iter().any(|arg| arg.as_str() == "greeter"); if enabled { println!("Adding Greeter service..."); diff --git a/tonic-build/src/server.rs b/tonic-build/src/server.rs index 9e42789ef..d9ab1ad6b 100644 --- a/tonic-build/src/server.rs +++ b/tonic-build/src/server.rs @@ -9,6 +9,7 @@ use proc_macro2::{Span, TokenStream}; use quote::quote; use syn::{Ident, Lit, LitStr}; +#[allow(clippy::too_many_arguments)] pub(crate) fn generate_internal( service: &T, emit_package: bool, @@ -209,6 +210,7 @@ pub(crate) fn generate_internal( } } +#[allow(clippy::too_many_arguments)] fn generate_trait( service: &T, emit_package: bool, diff --git a/tonic-web/src/call.rs b/tonic-web/src/call.rs index dd79971c6..731b9f667 100644 --- a/tonic-web/src/call.rs +++ b/tonic-web/src/call.rs @@ -428,7 +428,7 @@ fn make_trailers_frame(trailers: HeaderMap) -> Vec { /// or the buffer just contained grpc message frames. fn find_trailers(buf: &[u8]) -> Result { let mut len = 0; - let mut temp_buf = &buf[..]; + let mut temp_buf = buf; loop { // To check each frame, there must be at least GRPC_HEADER_SIZE @@ -457,7 +457,7 @@ fn find_trailers(buf: &[u8]) -> Result { return Ok(FindTrailers::IncompleteBuf); } - temp_buf = &buf[len as usize..]; + temp_buf = &buf[len..]; } } @@ -514,7 +514,7 @@ mod tests { fn find_trailers_non_buffered() { // Byte version of this: // b"\x80\0\0\0\x0fgrpc-status:0\r\n" - let buf = vec![ + let buf = [ 128, 0, 0, 0, 15, 103, 114, 112, 99, 45, 115, 116, 97, 116, 117, 115, 58, 48, 13, 10, ]; @@ -527,7 +527,7 @@ mod tests { fn find_trailers_buffered() { // Byte version of this: // b"\0\0\0\0L\n$975738af-1a17-4aea-b887-ed0bbced6093\x1a$da609e9b-f470-4cc0-a691-3fd6a005a436\x80\0\0\0\x0fgrpc-status:0\r\n" - let buf = vec![ + let buf = [ 0, 0, 0, 0, 76, 10, 36, 57, 55, 53, 55, 51, 56, 97, 102, 45, 49, 97, 49, 55, 45, 52, 97, 101, 97, 45, 98, 56, 56, 55, 45, 101, 100, 48, 98, 98, 99, 101, 100, 54, 48, 57, 51, 26, 36, 100, 97, 54, 48, 57, 101, 57, 98, 45, 102, 52, 55, 48, 45, 52, 99, 99, 48, diff --git a/tonic-web/tests/integration/tests/grpc.rs b/tonic-web/tests/integration/tests/grpc.rs index 8e81ef68c..98eca1f92 100644 --- a/tonic-web/tests/integration/tests/grpc.rs +++ b/tonic-web/tests/integration/tests/grpc.rs @@ -129,7 +129,7 @@ async fn spawn() -> Result<(Client, Client, Client, Client), Error> { let ((s1, u1), (s2, u2), (s3, u3), (s4, u4)) = join!(grpc(true), grpc(false), grpc_web(true), grpc_web(false)); - let _ = tokio::spawn(async move { join!(s1, s2, s3, s4) }); + drop(tokio::spawn(async move { join!(s1, s2, s3, s4) })); tokio::time::sleep(Duration::from_millis(30)).await; diff --git a/tonic-web/tests/integration/tests/grpc_web.rs b/tonic-web/tests/integration/tests/grpc_web.rs index e062a8380..3343d754c 100644 --- a/tonic-web/tests/integration/tests/grpc_web.rs +++ b/tonic-web/tests/integration/tests/grpc_web.rs @@ -65,7 +65,7 @@ async fn spawn() -> String { let url = format!("http://{}", listener.local_addr().unwrap()); let listener_stream = TcpListenerStream::new(listener); - let _ = tokio::spawn(async move { + drop(tokio::spawn(async move { Server::builder() .accept_http1(true) .layer(GrpcWebLayer::new()) @@ -73,7 +73,7 @@ async fn spawn() -> String { .serve_with_incoming(listener_stream) .await .unwrap() - }); + })); url } diff --git a/tonic/src/codec/encode.rs b/tonic/src/codec/encode.rs index bd48ee47b..593634f93 100644 --- a/tonic/src/codec/encode.rs +++ b/tonic/src/codec/encode.rs @@ -106,14 +106,14 @@ where BytesMut::new() }; - return EncodedBytes { + Self { source: Fuse::new(source), encoder, compression_encoding, max_message_size, buf, uncompression_buf, - }; + } } } diff --git a/tonic/src/codec/prost.rs b/tonic/src/codec/prost.rs index 47e736a71..d2f1652f4 100644 --- a/tonic/src/codec/prost.rs +++ b/tonic/src/codec/prost.rs @@ -326,7 +326,6 @@ mod tests { } } - #[allow(clippy::drop_ref)] fn poll_trailers( self: Pin<&mut Self>, _cx: &mut Context<'_>, diff --git a/tonic/src/metadata/value.rs b/tonic/src/metadata/value.rs index b7600dd4f..9253a9254 100644 --- a/tonic/src/metadata/value.rs +++ b/tonic/src/metadata/value.rs @@ -646,7 +646,7 @@ impl Eq for MetadataValue {} impl PartialOrd for MetadataValue { #[inline] fn partial_cmp(&self, other: &MetadataValue) -> Option { - self.inner.partial_cmp(&other.inner) + Some(self.cmp(other)) } } diff --git a/tonic/src/status.rs b/tonic/src/status.rs index 0b3892c45..da8b792e5 100644 --- a/tonic/src/status.rs +++ b/tonic/src/status.rs @@ -461,7 +461,7 @@ impl Status { .expect("Invalid status header, expected base64 encoded value") }) .map(Bytes::from) - .unwrap_or_else(Bytes::new); + .unwrap_or_default(); let mut other_headers = header_map.clone(); other_headers.remove(GRPC_STATUS_HEADER_CODE);