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 e62819891c fix(services/webdav): Add possibility to answer without
response if file isn't exist (#4170)
e62819891c is described below
commit e62819891cf9fbcee6e8b217cfa0c6899bed91b0
Author: Alex Overchenko <[email protected]>
AuthorDate: Wed Feb 7 19:45:06 2024 +0300
fix(services/webdav): Add possibility to answer without response if file
isn't exist (#4170)
Add possibility to answer without response if file isn't exist
---
core/src/services/webdav/backend.rs | 17 ++++++++++++++---
core/src/services/webdav/lister.rs | 5 +++++
2 files changed, 19 insertions(+), 3 deletions(-)
diff --git a/core/src/services/webdav/backend.rs
b/core/src/services/webdav/backend.rs
index e2279d1f03..75106ddbe7 100644
--- a/core/src/services/webdav/backend.rs
+++ b/core/src/services/webdav/backend.rs
@@ -33,6 +33,7 @@ use serde::Deserialize;
use super::error::parse_error;
use super::lister::Multistatus;
+use super::lister::MultistatusOptional;
use super::lister::WebdavLister;
use super::writer::WebdavWriter;
use crate::raw::*;
@@ -303,10 +304,20 @@ impl Accessor for WebdavBackend {
}
let bs = resp.into_body().bytes().await?;
- let result: Multistatus =
+ let result: MultistatusOptional =
quick_xml::de::from_reader(bs.reader()).map_err(new_xml_deserialize_error)?;
- let item = result
- .response
+
+ let response = match result.response {
+ Some(v) => v,
+ None => {
+ return Err(Error::new(
+ ErrorKind::NotFound,
+ "Failed getting item stat: response field was not found",
+ ))
+ }
+ };
+
+ let item = response
.first()
.ok_or_else(|| {
Error::new(
diff --git a/core/src/services/webdav/lister.rs
b/core/src/services/webdav/lister.rs
index adca8ef6b8..1310844450 100644
--- a/core/src/services/webdav/lister.rs
+++ b/core/src/services/webdav/lister.rs
@@ -78,6 +78,11 @@ pub struct Multistatus {
pub response: Vec<ListOpResponse>,
}
+#[derive(Deserialize, Debug, PartialEq, Eq, Clone)]
+pub struct MultistatusOptional {
+ pub response: Option<Vec<ListOpResponse>>,
+}
+
#[derive(Deserialize, Debug, PartialEq, Eq, Clone)]
pub struct ListOpResponse {
pub href: String,