]> uap-core.de Git - note.git/commitdiff
add resource methods for setting/getting (string) properties
authorOlaf Wintermann <olaf.wintermann@gmail.com>
Thu, 25 Jun 2026 19:27:17 +0000 (21:27 +0200)
committerOlaf Wintermann <olaf.wintermann@gmail.com>
Thu, 25 Jun 2026 19:27:17 +0000 (21:27 +0200)
dav-rs/src/dav/resource.rs

index 536b434f8e169d56560abb38af54a012cc040ead..9089b8deaa28e7003af84f2f302791a96e8c6100 100644 (file)
@@ -306,6 +306,80 @@ impl<'a> ResourceRef<'a> {
             }
         }
     }
+
+    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();
+        let cstr_value = CString::new(value).unwrap();
+        unsafe {
+            dav_set_string_property_ns(self.ptr, cstr_ns.as_ptr(), cstr_name.as_ptr(), cstr_value.as_ptr());
+        }
+    }
+
+    pub fn set_string_prefixed_property(&self, prefixed_name: &str, value: &str) {
+        let cstr_name = CString::new(prefixed_name).unwrap();
+        let cstr_value = CString::new(value).unwrap();
+        unsafe {
+            dav_set_string_property(self.ptr, cstr_name.as_ptr(), cstr_value.as_ptr());
+        }
+    }
+
+    pub fn set_encrypted_string_property(&self, namespace: &str, name: &str, value: &str) {
+        let cstr_ns = CString::new(namespace).unwrap();
+        let cstr_name = CString::new(name).unwrap();
+        let cstr_value = CString::new(value).unwrap();
+        unsafe {
+            dav_set_encrypted_string_property_ns(self.ptr, cstr_ns.as_ptr(), cstr_name.as_ptr(), cstr_value.as_ptr());
+        }
+    }
+
+    pub fn get_string_property(&self, namespace: &str, name: &str) -> Option<String> {
+        let cstr_ns = CString::new(namespace).unwrap();
+        let cstr_name = CString::new(name).unwrap();
+        unsafe {
+            let value = dav_get_string_property_ns(self.ptr, cstr_ns.as_ptr(), cstr_name.as_ptr());
+            if value.is_null() {
+                None
+            } else {
+                Some(CStr::from_ptr(value).to_string_lossy() .into_owned())
+            }
+        }
+    }
+
+    pub fn get_string_prefixed_property(&self, prefixed_name: &str) -> Option<String> {
+        let cstr_name = CString::new(prefixed_name).unwrap();
+        unsafe {
+            let value = dav_get_string_property(self.ptr, cstr_name.as_ptr());
+            if value.is_null() {
+                None
+            } else {
+                Some(CStr::from_ptr(value).to_string_lossy() .into_owned())
+            }
+        }
+    }
+
+    pub fn remove_property(&self, namespace: &str, name: &str) {
+        let cstr_ns = CString::new(namespace).unwrap();
+        let cstr_name = CString::new(name).unwrap();
+        unsafe {
+            dav_remove_property_ns(self.ptr, cstr_ns.as_ptr(), cstr_name.as_ptr());
+        }
+    }
+
+    pub fn remove_prefixed_property(&self, prefixed_name: &str) {
+        let cstr_name = CString::new(prefixed_name).unwrap();
+        unsafe {
+            dav_remove_property(self.ptr, cstr_name.as_ptr());
+        }
+    }
+
+    pub fn remove_encrypted_property(&self, namespace: &str, name: &str) {
+        let cstr_ns = CString::new(namespace).unwrap();
+        let cstr_name = CString::new(name).unwrap();
+        unsafe {
+            dav_remove_encrypted_property_ns(self.ptr, cstr_ns.as_ptr(), cstr_name.as_ptr());
+        }
+    }
 }
 
 
@@ -464,4 +538,14 @@ unsafe extern "C" {
     fn dav_lock(res: *mut ffi::DavResource) -> c_int;
     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_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);
+    fn dav_set_string_property_ns(res: *mut ffi::DavResource, namespace: *const c_char, property: *const c_char, value: *const c_char);
+    fn dav_set_encrypted_string_property_ns(res: *mut ffi::DavResource, namespace: *const c_char, property: *const c_char, value: *const c_char);
+
+    fn dav_remove_property(res: *mut ffi::DavResource, property: *const c_char);
+    fn dav_remove_property_ns(res: *mut ffi::DavResource, namespace: *const c_char, property: *const c_char);
+    fn dav_remove_encrypted_property_ns(res: *mut ffi::DavResource, namespace: *const c_char, property: *const c_char);
 }
\ No newline at end of file