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 c35da0d92 feat(services/koofr): Implement write returns metadata 
(#6809)
c35da0d92 is described below

commit c35da0d92442756d5742eaf70a2259dd23621b53
Author: GUAN-HAO HUANG <[email protected]>
AuthorDate: Fri Nov 21 15:23:37 2025 +0800

    feat(services/koofr): Implement write returns metadata (#6809)
---
 core/src/services/koofr/writer.rs | 25 ++++++++++++++++++++++++-
 1 file changed, 24 insertions(+), 1 deletion(-)

diff --git a/core/src/services/koofr/writer.rs 
b/core/src/services/koofr/writer.rs
index eb0956f3a..b7ec5ef83 100644
--- a/core/src/services/koofr/writer.rs
+++ b/core/src/services/koofr/writer.rs
@@ -17,8 +17,10 @@
 
 use std::sync::Arc;
 
+use bytes::Buf;
 use http::StatusCode;
 
+use super::core::File;
 use super::core::KoofrCore;
 use super::error::parse_error;
 use crate::raw::*;
@@ -35,6 +37,21 @@ impl KoofrWriter {
     pub fn new(core: Arc<KoofrCore>, path: String) -> Self {
         KoofrWriter { core, path }
     }
+
+    fn parse_metadata(file: &File) -> Result<Metadata> {
+        let mode = if file.ty == "dir" {
+            EntryMode::DIR
+        } else {
+            EntryMode::FILE
+        };
+
+        let mut meta = Metadata::new(mode);
+        meta.set_content_length(file.size);
+        meta.set_content_type(&file.content_type);
+        meta.set_last_modified(Timestamp::from_millisecond(file.modified)?);
+
+        Ok(meta)
+    }
 }
 
 impl oio::OneShotWrite for KoofrWriter {
@@ -46,7 +63,13 @@ impl oio::OneShotWrite for KoofrWriter {
         let status = resp.status();
 
         match status {
-            StatusCode::OK | StatusCode::CREATED => Ok(Metadata::default()),
+            StatusCode::OK | StatusCode::CREATED => {
+                let body = resp.into_body();
+                let file: File =
+                    
serde_json::from_reader(body.reader()).map_err(new_json_deserialize_error)?;
+                let metadata = Self::parse_metadata(&file)?;
+                Ok(metadata)
+            }
             _ => Err(parse_error(resp)),
         }
     }

Reply via email to