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,

Reply via email to