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)),
}
}