You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@opendal.apache.org by xu...@apache.org on 2025/04/08 11:19:41 UTC
(opendal) branch main updated: chore(services/cos): Use QueryPairsWriter for url write (#5987)
This is an automated email from the ASF dual-hosted git repository.
xuanwo pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/opendal.git
The following commit(s) were added to refs/heads/main by this push:
new 1168beb4c chore(services/cos): Use QueryPairsWriter for url write (#5987)
1168beb4c is described below
commit 1168beb4c34f62e22e61bdfa6dba838d0152a32c
Author: Asuka Minato <i...@asukaminato.eu.org>
AuthorDate: Tue Apr 8 20:19:34 2025 +0900
chore(services/cos): Use QueryPairsWriter for url write (#5987)
* QueryPairsWriter
* Update core.rs
* allow v to be empty
* save one call
---
core/src/raw/http_util/uri.rs | 6 ++++--
core/src/services/cos/core.rs | 42 +++++++++++++++---------------------------
2 files changed, 19 insertions(+), 29 deletions(-)
diff --git a/core/src/raw/http_util/uri.rs b/core/src/raw/http_util/uri.rs
index da0ec35fd..b74de6677 100644
--- a/core/src/raw/http_util/uri.rs
+++ b/core/src/raw/http_util/uri.rs
@@ -101,8 +101,10 @@ impl QueryPairsWriter {
// Append the key and value to the base string
self.base.push_str(key);
- self.base.push('=');
- self.base.push_str(value);
+ if !value.is_empty() {
+ self.base.push('=');
+ self.base.push_str(value);
+ }
self
}
diff --git a/core/src/services/cos/core.rs b/core/src/services/cos/core.rs
index 2c5a2b2f2..41b96d691 100644
--- a/core/src/services/cos/core.rs
+++ b/core/src/services/cos/core.rs
@@ -17,7 +17,6 @@
use std::fmt::Debug;
use std::fmt::Formatter;
-use std::fmt::Write;
use std::sync::Arc;
use std::time::Duration;
@@ -344,27 +343,22 @@ impl CosCore {
) -> Result<Response<Buffer>> {
let p = build_abs_path(&self.root, path);
- let mut queries = vec![];
+ let mut url = QueryPairsWriter::new(&self.endpoint);
+
if !p.is_empty() {
- queries.push(format!("prefix={}", percent_encode_path(&p)));
+ url = url.push("prefix", &percent_encode_path(&p));
}
if !delimiter.is_empty() {
- queries.push(format!("delimiter={delimiter}"));
+ url = url.push("delimiter", delimiter);
}
if let Some(limit) = limit {
- queries.push(format!("max-keys={limit}"));
+ url = url.push("max-keys", &limit.to_string());
}
if !next_marker.is_empty() {
- queries.push(format!("marker={next_marker}"));
+ url = url.push("marker", next_marker);
}
- let url = if queries.is_empty() {
- self.endpoint.to_string()
- } else {
- format!("{}?{}", self.endpoint, queries.join("&"))
- };
-
- let mut req = Request::get(&url)
+ let mut req = Request::get(url.finish())
.body(Buffer::new())
.map_err(new_request_build_error)?;
@@ -503,32 +497,26 @@ impl CosCore {
) -> Result<Response<Buffer>> {
let p = build_abs_path(&self.root, prefix);
- let mut url = format!("{}?versions", self.endpoint);
+ let mut url = QueryPairsWriter::new(&self.endpoint);
+ url = url.push("versions", "");
if !p.is_empty() {
- write!(url, "&prefix={}", percent_encode_path(p.as_str()))
- .expect("write into string must succeed");
+ url = url.push("prefix", &percent_encode_path(p.as_str()));
}
if !delimiter.is_empty() {
- write!(url, "&delimiter={}", delimiter).expect("write into string must succeed");
+ url = url.push("delimiter", delimiter);
}
if let Some(limit) = limit {
- write!(url, "&max-keys={}", limit).expect("write into string must succeed");
+ url = url.push("max-keys", &limit.to_string());
}
if !key_marker.is_empty() {
- write!(url, "&key-marker={}", percent_encode_path(key_marker))
- .expect("write into string must succeed");
+ url = url.push("key-marker", &percent_encode_path(key_marker));
}
if !version_id_marker.is_empty() {
- write!(
- url,
- "&version-id-marker={}",
- percent_encode_path(version_id_marker)
- )
- .expect("write into string must succeed");
+ url = url.push("version-id-marker", &percent_encode_path(version_id_marker));
}
- let mut req = Request::get(&url)
+ let mut req = Request::get(url.finish())
.body(Buffer::new())
.map_err(new_request_build_error)?;