Fix prop parsing in PROPPATCH

This commit is contained in:
Lennart
2024-11-04 21:26:44 +01:00
parent 0cf6e5cb92
commit 4da0ca34c7
2 changed files with 19 additions and 1 deletions

View File

@@ -93,7 +93,14 @@ pub async fn route_proppatch<R: ResourceService>(
prop: PropertyElement { prop },
}) => {
if prop.invalid_property() {
props_not_found.push(propname);
if <R::Resource as Resource>::list_all_props().contains(&propname.as_str()) {
// This happens in following cases:
// - read-only properties with #[serde(skip_deserializing)]
// - for read-only properties from extensions
props_conflict.push(propname)
} else {
props_not_found.push(propname);
}
continue;
}
match resource.set_prop(prop) {

View File

@@ -43,6 +43,17 @@ pub trait Resource: Clone + 'static {
Self::PropName::VARIANTS
}
fn list_all_props() -> Vec<&'static str> {
let mut props = Self::list_props().to_vec();
props.extend(
Self::list_extensions()
.into_iter()
.map(|ext| ext.list_props().to_vec())
.concat(),
);
props
}
fn get_prop(
&self,
rmap: &ResourceMap,