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