This is an automated email from the ASF dual-hosted git repository.

junouyang 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 58b136a81 feat(oay): add write for oay webdav (#2769)
58b136a81 is described below

commit 58b136a8123392959f117a53b3fb3df3a461d7e2
Author: Flash <[email protected]>
AuthorDate: Fri Aug 4 21:13:50 2023 +0800

    feat(oay): add write for oay webdav (#2769)
    
    * add write for oay webdav
    
    * update
    
    * cargo fmt
    
    * update
    
    * cargo fmt
---
 bin/oay/src/services/webdav/webdav_file.rs | 31 ++++++++++++++++++++++--------
 1 file changed, 23 insertions(+), 8 deletions(-)

diff --git a/bin/oay/src/services/webdav/webdav_file.rs 
b/bin/oay/src/services/webdav/webdav_file.rs
index 80be6f5a4..5a10813ea 100644
--- a/bin/oay/src/services/webdav/webdav_file.rs
+++ b/bin/oay/src/services/webdav/webdav_file.rs
@@ -17,6 +17,7 @@
 
 use std::io::SeekFrom;
 
+use bytes::Bytes;
 use dav_server::davpath::DavPath;
 use dav_server::fs::DavFile;
 use dav_server::fs::DavMetaData;
@@ -35,7 +36,7 @@ pub struct WebdavFile {
 }
 
 impl DavFile for WebdavFile {
-    fn read_bytes(&mut self, count: usize) -> FsFuture<bytes::Bytes> {
+    fn read_bytes(&mut self, count: usize) -> FsFuture<Bytes> {
         async move {
             let file_path = self.path.as_url_string();
             let content = self
@@ -44,7 +45,7 @@ impl DavFile for WebdavFile {
                 .await
                 .unwrap();
             //error handle ?
-            Ok(bytes::Bytes::from(content))
+            Ok(Bytes::from(content))
         }
         .boxed()
     }
@@ -61,19 +62,33 @@ impl DavFile for WebdavFile {
         .boxed()
     }
 
-    fn write_buf(&mut self, _buf: Box<dyn bytes::Buf + Send>) -> FsFuture<()> {
-        todo!()
+    fn write_buf(&mut self, buf: Box<dyn bytes::Buf + Send>) -> FsFuture<()> {
+        self.write_bytes(Bytes::copy_from_slice(buf.chunk()))
     }
 
-    fn write_bytes(&mut self, _buf: bytes::Bytes) -> FsFuture<()> {
-        todo!()
+    fn write_bytes(&mut self, buf: Bytes) -> FsFuture<()> {
+        async move {
+            let file_path = self.path.as_url_string();
+            self.op.write(&file_path, buf).await.map_err(convert_error)
+        }
+        .boxed()
     }
 
     fn seek(&mut self, _pos: SeekFrom) -> FsFuture<u64> {
-        todo!()
+        
futures_util::future::err(dav_server::fs::FsError::NotImplemented).boxed()
     }
 
     fn flush(&mut self) -> FsFuture<()> {
-        todo!()
+        futures_util::future::ok(()).boxed()
+    }
+}
+
+fn convert_error(opendal_error: opendal::Error) -> dav_server::fs::FsError {
+    match opendal_error.kind() {
+        opendal::ErrorKind::AlreadyExists | opendal::ErrorKind::IsSameFile => {
+            dav_server::fs::FsError::Exists
+        }
+        opendal::ErrorKind::NotFound => dav_server::fs::FsError::NotFound,
+        _ => dav_server::fs::FsError::GeneralFailure,
     }
 }

Reply via email to