From: Olaf Wintermann Date: Thu, 2 Jul 2026 18:11:59 +0000 (+0200) Subject: add methods for getting/setting xml properties X-Git-Url: https://uap-core.de/gitweb/?a=commitdiff_plain;h=HEAD;p=note.git add methods for getting/setting xml properties --- diff --git a/dav-rs/src/dav/resource.rs b/dav-rs/src/dav/resource.rs index 0a8fef7..b843658 100644 --- a/dav-rs/src/dav/resource.rs +++ b/dav-rs/src/dav/resource.rs @@ -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); diff --git a/dav-rs/src/dav/xml.rs b/dav-rs/src/dav/xml.rs index a1c0d9e..42cd5c6 100644 --- a/dav-rs/src/dav/xml.rs +++ b/dav-rs/src/dav/xml.rs @@ -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 } }