]> uap-core.de Git - note.git/commitdiff
add methods for getting/setting xml properties main
authorOlaf Wintermann <olaf.wintermann@gmail.com>
Thu, 2 Jul 2026 18:11:59 +0000 (20:11 +0200)
committerOlaf Wintermann <olaf.wintermann@gmail.com>
Thu, 2 Jul 2026 18:11:59 +0000 (20:11 +0200)
dav-rs/src/dav/resource.rs
dav-rs/src/dav/xml.rs

index 0a8fef7da598bf3975c8d99f6de21f59369d0d53..b843658822c9c41d463007cf6ba1b42158a60ede 100644 (file)
@@ -36,6 +36,7 @@ use libc::size_t;
 use crate::dav::{ffi, utils};
 use crate::dav::ffi::{DavReadFunc, DavSeekFunc, DavWriteFunc};
 use crate::dav::session::{get_session_error, DavError, Session};
+use crate::dav::xml::XmlNodeRef;
 
 pub struct Resource<'a> {
     pub base: ResourceRef<'a>
@@ -294,6 +295,39 @@ impl<'a> ResourceRef<'a> {
         }
     }
 
+    pub fn get_property(&self, namespace: &str, name: &str) -> XmlNodeRef<'_> {
+        let ns_cstr = CString::new(namespace).unwrap();
+        let name_cstr = CString::new(name).unwrap();
+        unsafe {
+            let node_ptr = dav_get_property_ns(self.ptr, ns_cstr.as_ptr(), name_cstr.as_ptr());
+            XmlNodeRef::from_ptr(node_ptr)
+        }
+    }
+
+    pub fn get_prefixed_property(&self, prefixed_name: &str) -> XmlNodeRef<'_> {
+        let prefixed_name_cstr = CString::new(prefixed_name).unwrap();
+        unsafe {
+            let node_ptr = dav_get_property(self.ptr, prefixed_name_cstr.as_ptr());
+            XmlNodeRef::from_ptr(node_ptr)
+        }
+    }
+
+    pub fn set_property(&self, namespace: &str, name: &str, value: &XmlNodeRef) {
+        let ns_cstr = CString::new(namespace).unwrap();
+        let name_cstr = CString::new(name).unwrap();
+        unsafe {
+            dav_set_property_ns(self.ptr, ns_cstr.as_ptr(), name_cstr.as_ptr(), value.ptr);
+        }
+    }
+
+    pub fn set_prefixed_property(&self, prefixed_name: &str, value: &XmlNodeRef) {
+        let prefixed_name_cstr = CString::new(prefixed_name).unwrap();
+        unsafe {
+            dav_set_property(self.ptr, prefixed_name_cstr.as_ptr(), value.ptr);
+        }
+    }
+
+
     pub fn set_string_property(&self, namespace: &str, name: &str, value: &str) {
         let cstr_ns = CString::new(namespace).unwrap();
         let cstr_name = CString::new(name).unwrap();
@@ -526,6 +560,10 @@ unsafe extern "C" {
     fn dav_lock_t(res: *mut ffi::DavResource, timeout: libc::time_t) -> c_int;
     fn dav_unlock(res: *mut ffi::DavResource) -> c_int;
 
+    fn dav_get_property(res: *mut ffi::DavResource, property: *const c_char) -> *mut ffi::DavXmlNode;
+    fn dav_get_property_ns(res: *mut ffi::DavResource, namespace: *const c_char, property: *const c_char) -> *mut ffi::DavXmlNode;
+    fn dav_set_property(res: *mut ffi::DavResource, property: *const c_char, value: *mut ffi::DavXmlNode);
+    fn dav_set_property_ns(res: *mut ffi::DavResource, namespace: *const c_char, property: *const c_char, value: *mut ffi::DavXmlNode);
     fn dav_get_string_property(res: *mut ffi::DavResource, property: *const c_char) -> *mut c_char;
     fn dav_get_string_property_ns(res: *mut ffi::DavResource, namespace: *const c_char, property: *const c_char) -> *mut c_char;
     fn dav_set_string_property(res: *mut ffi::DavResource, property: *const c_char, value: *const c_char);
index a1c0d9e3bebd6b368aff4ead4bf8bba7fe93d089..42cd5c65f781c5336167b743e1f4387c94ec85eb 100644 (file)
@@ -52,7 +52,7 @@ impl<'a> Deref for XmlNode<'a> {
 
 
 impl<'a> XmlNodeRef<'a> {
-    fn from_ptr(ptr: *mut ffi::DavXmlNode) -> XmlNodeRef<'a > {
+    pub fn from_ptr(ptr: *mut ffi::DavXmlNode) -> XmlNodeRef<'a > {
         XmlNodeRef { ptr, _marker: PhantomData }
     }