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/incubator-opendal.git


The following commit(s) were added to refs/heads/main by this push:
     new 82a865fa1 feat(services/wasabi): Rewrite the method signatures using 
OpRead,OpW… (#3099)
82a865fa1 is described below

commit 82a865fa1ef2a436eb7608fb1f2f50a990d6d1f3
Author: Au <[email protected]>
AuthorDate: Sun Sep 17 23:38:32 2023 +0800

    feat(services/wasabi): Rewrite the method signatures using OpRead,OpW… 
(#3099)
---
 core/src/services/wasabi/backend.rs | 17 +++---------
 core/src/services/wasabi/core.rs    | 54 ++++++++++++-------------------------
 core/src/services/wasabi/writer.rs  |  4 +--
 3 files changed, 22 insertions(+), 53 deletions(-)

diff --git a/core/src/services/wasabi/backend.rs 
b/core/src/services/wasabi/backend.rs
index dcb91f2ea..a7a41042f 100644
--- a/core/src/services/wasabi/backend.rs
+++ b/core/src/services/wasabi/backend.rs
@@ -715,7 +715,7 @@ impl Accessor for WasabiBackend {
     async fn create_dir(&self, path: &str, _: OpCreateDir) -> 
Result<RpCreateDir> {
         let mut req =
             self.core
-                .put_object_request(path, Some(0), None, None, None, 
AsyncBody::Empty)?;
+                .put_object_request(path, Some(0), &OpWrite::default(), 
AsyncBody::Empty)?;
 
         self.core.sign(&mut req).await?;
 
@@ -733,10 +733,7 @@ impl Accessor for WasabiBackend {
     }
 
     async fn read(&self, path: &str, args: OpRead) -> Result<(RpRead, 
Self::Reader)> {
-        let resp = self
-            .core
-            .get_object(path, args.range(), args.if_none_match())
-            .await?;
+        let resp = self.core.get_object(path, &args).await?;
 
         let status = resp.status();
 
@@ -814,16 +811,10 @@ impl Accessor for WasabiBackend {
         // We will not send this request out, just for signing.
         let mut req = match args.operation() {
             PresignOperation::Stat(v) => self.core.head_object_request(path, 
v)?,
-            PresignOperation::Read(v) => self.core.get_object_request(
-                path,
-                v.range(),
-                v.override_content_disposition(),
-                v.override_cache_control(),
-                v.if_none_match(),
-            )?,
+            PresignOperation::Read(v) => self.core.get_object_request(path, 
v)?,
             PresignOperation::Write(_) => {
                 self.core
-                    .put_object_request(path, None, None, None, None, 
AsyncBody::Empty)?
+                    .put_object_request(path, None, &OpWrite::default(), 
AsyncBody::Empty)?
             }
         };
 
diff --git a/core/src/services/wasabi/core.rs b/core/src/services/wasabi/core.rs
index 23506c260..2a44bb564 100644
--- a/core/src/services/wasabi/core.rs
+++ b/core/src/services/wasabi/core.rs
@@ -231,14 +231,7 @@ impl WasabiCore {
         Ok(req)
     }
 
-    pub fn get_object_request(
-        &self,
-        path: &str,
-        range: BytesRange,
-        override_content_disposition: Option<&str>,
-        override_cache_control: Option<&str>,
-        if_none_match: Option<&str>,
-    ) -> Result<Request<AsyncBody>> {
+    pub fn get_object_request(&self, path: &str, args: &OpRead) -> 
Result<Request<AsyncBody>> {
         let p = build_abs_path(&self.root, path);
 
         // Construct headers to add to the request
@@ -246,14 +239,14 @@ impl WasabiCore {
 
         // Add query arguments to the URL based on response overrides
         let mut query_args = Vec::new();
-        if let Some(override_content_disposition) = 
override_content_disposition {
+        if let Some(override_content_disposition) = 
args.override_content_disposition() {
             query_args.push(format!(
                 "{}={}",
                 constants::RESPONSE_CONTENT_DISPOSITION,
                 percent_encode_path(override_content_disposition)
             ))
         }
-        if let Some(override_cache_control) = override_cache_control {
+        if let Some(override_cache_control) = args.override_cache_control() {
             query_args.push(format!(
                 "{}={}",
                 constants::RESPONSE_CACHE_CONTROL,
@@ -266,11 +259,12 @@ impl WasabiCore {
 
         let mut req = Request::get(&url);
 
+        let range = args.range();
         if !range.is_full() {
             req = req.header(http::header::RANGE, range.to_header());
         }
 
-        if let Some(if_none_match) = if_none_match {
+        if let Some(if_none_match) = args.if_none_match() {
             req = req.header(http::header::IF_NONE_MATCH, if_none_match);
         }
 
@@ -288,10 +282,9 @@ impl WasabiCore {
     pub async fn get_object(
         &self,
         path: &str,
-        range: BytesRange,
-        if_none_match: Option<&str>,
+        args: &OpRead,
     ) -> Result<Response<IncomingAsyncBody>> {
-        let mut req = self.get_object_request(path, range, None, None, 
if_none_match)?;
+        let mut req = self.get_object_request(path, args)?;
 
         self.sign(&mut req).await?;
 
@@ -302,9 +295,7 @@ impl WasabiCore {
         &self,
         path: &str,
         size: Option<usize>,
-        content_type: Option<&str>,
-        content_disposition: Option<&str>,
-        cache_control: Option<&str>,
+        args: &OpWrite,
         body: AsyncBody,
     ) -> Result<Request<AsyncBody>> {
         let p = build_abs_path(&self.root, path);
@@ -317,15 +308,15 @@ impl WasabiCore {
             req = req.header(CONTENT_LENGTH, size)
         }
 
-        if let Some(mime) = content_type {
+        if let Some(mime) = args.content_type() {
             req = req.header(CONTENT_TYPE, mime)
         }
 
-        if let Some(pos) = content_disposition {
+        if let Some(pos) = args.content_disposition() {
             req = req.header(CONTENT_DISPOSITION, pos)
         }
 
-        if let Some(cache_control) = cache_control {
+        if let Some(cache_control) = args.cache_control() {
             req = req.header(CACHE_CONTROL, cache_control)
         }
 
@@ -471,9 +462,7 @@ impl WasabiCore {
     pub async fn initiate_multipart_upload(
         &self,
         path: &str,
-        content_type: Option<&str>,
-        content_disposition: Option<&str>,
-        cache_control: Option<&str>,
+        args: &OpWrite,
     ) -> Result<Response<IncomingAsyncBody>> {
         let p = build_abs_path(&self.root, path);
 
@@ -481,15 +470,15 @@ impl WasabiCore {
 
         let mut req = Request::post(&url);
 
-        if let Some(mime) = content_type {
+        if let Some(mime) = args.content_type() {
             req = req.header(CONTENT_TYPE, mime)
         }
 
-        if let Some(content_disposition) = content_disposition {
+        if let Some(content_disposition) = args.content_disposition() {
             req = req.header(CONTENT_DISPOSITION, content_disposition)
         }
 
-        if let Some(cache_control) = cache_control {
+        if let Some(cache_control) = args.cache_control() {
             req = req.header(CACHE_CONTROL, cache_control)
         }
 
@@ -638,19 +627,10 @@ impl WasabiCore {
         &self,
         path: &str,
         size: Option<usize>,
-        content_type: Option<&str>,
-        content_disposition: Option<&str>,
-        cache_control: Option<&str>,
+        args: &OpWrite,
         body: AsyncBody,
     ) -> Result<Response<IncomingAsyncBody>> {
-        let mut req = self.put_object_request(
-            path,
-            size,
-            content_type,
-            content_disposition,
-            cache_control,
-            body,
-        )?;
+        let mut req = self.put_object_request(path, size, args, body)?;
 
         self.sign(&mut req).await?;
 
diff --git a/core/src/services/wasabi/writer.rs 
b/core/src/services/wasabi/writer.rs
index cd76bf82c..50fc8ff4f 100644
--- a/core/src/services/wasabi/writer.rs
+++ b/core/src/services/wasabi/writer.rs
@@ -49,9 +49,7 @@ impl oio::OneShotWrite for WasabiWriter {
             .put_object(
                 &self.path,
                 Some(bs.len()),
-                self.op.content_type(),
-                self.op.content_disposition(),
-                self.op.cache_control(),
+                &self.op,
                 AsyncBody::ChunkedBytes(bs),
             )
             .await?;

Reply via email to