From 66bf9db1a41b58afc03d877509e45b555067cfd6 Mon Sep 17 00:00:00 2001 From: yihong Date: Fri, 17 Jan 2025 09:58:17 +0800 Subject: [PATCH] refactor: refactor some unnecessary clone and use next_back to make clippy happy (#5554) --- core/benches/vs_s3/src/main.rs | 6 +++--- core/src/raw/http_util/header.rs | 2 +- core/src/raw/path.rs | 2 +- core/src/services/azblob/error.rs | 7 ++++--- core/src/services/s3/error.rs | 6 ++++-- 5 files changed, 13 insertions(+), 10 deletions(-) diff --git a/core/benches/vs_s3/src/main.rs b/core/benches/vs_s3/src/main.rs index 91b1be90495f..324b2bbad98c 100644 --- a/core/benches/vs_s3/src/main.rs +++ b/core/benches/vs_s3/src/main.rs @@ -69,7 +69,7 @@ fn bench_read(c: &mut Criterion, op: Operator, s3_client: aws_sdk_s3::Client, bu let mut group = c.benchmark_group("read"); group.throughput(criterion::Throughput::Bytes(16 * 1024 * 1024)); - TEST_RUNTIME.block_on(prepare(op.clone())); + TEST_RUNTIME.block_on(prepare(&op)); group.bench_function("opendal_s3_reader", |b| { b.to_async(&*TEST_RUNTIME).iter(|| async { @@ -118,10 +118,10 @@ fn bench_read(c: &mut Criterion, op: Operator, s3_client: aws_sdk_s3::Client, bu group.finish() } -async fn prepare(op: Operator) { +async fn prepare(op: &Operator) { let mut rng = thread_rng(); let mut content = vec![0; 16 * 1024 * 1024]; rng.fill_bytes(&mut content); - op.write("file", content.clone()).await.unwrap(); + op.write("file", content).await.unwrap(); } diff --git a/core/src/raw/http_util/header.rs b/core/src/raw/http_util/header.rs index 2da77a4b08dc..2db92e9efcad 100644 --- a/core/src/raw/http_util/header.rs +++ b/core/src/raw/http_util/header.rs @@ -129,7 +129,7 @@ where .with_operation("http_util::parse_header_to_str") })?; - let value = if let Some(v) = headers.get(name.clone()) { + let value = if let Some(v) = headers.get(&name) { v } else { return Ok(None); diff --git a/core/src/raw/path.rs b/core/src/raw/path.rs index fb3c4ad07abc..79b44951495b 100644 --- a/core/src/raw/path.rs +++ b/core/src/raw/path.rs @@ -157,7 +157,7 @@ pub fn get_basename(path: &str) -> &str { if !path.ends_with('/') { return path .split('/') - .last() + .next_back() .expect("file path without name is invalid"); } diff --git a/core/src/services/azblob/error.rs b/core/src/services/azblob/error.rs index 1ea38ad8755e..c67d805c035e 100644 --- a/core/src/services/azblob/error.rs +++ b/core/src/services/azblob/error.rs @@ -60,8 +60,8 @@ impl Debug for AzblobError { /// Parse error response into Error. pub(super) fn parse_error(resp: Response) -> Error { - let (parts, mut body) = resp.into_parts(); - let bs = body.copy_to_bytes(body.remaining()); + let (parts, body) = resp.into_parts(); + let bs = body.to_bytes(); let (kind, retryable) = match parts.status { StatusCode::NOT_FOUND => (ErrorKind::NotFound, false), @@ -76,7 +76,8 @@ pub(super) fn parse_error(resp: Response) -> Error { _ => (ErrorKind::Unexpected, false), }; - let mut message = match de::from_reader::<_, AzblobError>(bs.clone().reader()) { + let bs_content = bs.chunk(); + let mut message = match de::from_reader::<_, AzblobError>(bs_content.reader()) { Ok(azblob_err) => format!("{azblob_err:?}"), Err(_) => String::from_utf8_lossy(&bs).into_owned(), }; diff --git a/core/src/services/s3/error.rs b/core/src/services/s3/error.rs index 503ca4ecbd77..385b75fac109 100644 --- a/core/src/services/s3/error.rs +++ b/core/src/services/s3/error.rs @@ -37,6 +37,7 @@ pub(crate) struct S3Error { /// Parse error response into Error. pub(super) fn parse_error(resp: Response) -> Error { let (parts, body) = resp.into_parts(); + let bs = body.to_bytes(); let (mut kind, mut retryable) = match parts.status.as_u16() { 403 => (ErrorKind::PermissionDenied, false), @@ -49,9 +50,10 @@ pub(super) fn parse_error(resp: Response) -> Error { _ => (ErrorKind::Unexpected, false), }; - let (message, s3_err) = de::from_reader::<_, S3Error>(body.clone().reader()) + let body_content = bs.chunk(); + let (message, s3_err) = de::from_reader::<_, S3Error>(body_content.reader()) .map(|s3_err| (format!("{s3_err:?}"), Some(s3_err))) - .unwrap_or_else(|_| (String::from_utf8_lossy(body.chunk()).into_owned(), None)); + .unwrap_or_else(|_| (String::from_utf8_lossy(&bs).into_owned(), None)); if let Some(s3_err) = s3_err { (kind, retryable) = parse_s3_error_code(s3_err.code.as_str()).unwrap_or((kind, retryable));