Skip to content

Commit 4b345c8

Browse files
committed
Derive attributes access perms
1 parent 1a42d60 commit 4b345c8

1 file changed

Lines changed: 29 additions & 3 deletions

File tree

rs-matter-macros-impl/src/idl/cluster.rs

Lines changed: 29 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@
2222
use proc_macro2::{Ident, Literal, Span, TokenStream};
2323
use quote::quote;
2424

25-
use rs_matter_data_model::{Cluster, StructType};
25+
use rs_matter_data_model::{AccessPrivilege, Cluster, StructType};
2626

2727
use super::id::idl_attribute_name_to_enum_variant_name;
2828
use super::IdlGenerateContext;
@@ -279,11 +279,37 @@ pub fn cluster(cluster: &Cluster, context: &IdlGenerateContext) -> TokenStream {
279279
Span::call_site(),
280280
);
281281

282+
let mut acc_rw = quote!(#krate::data_model::objects::Access::READ);
283+
let mut acc_priv = attr.read_acl;
284+
if !attr.is_read_only {
285+
acc_rw = quote!(#acc_rw.union(#krate::data_model::objects::Access::WRITE));
286+
acc_priv = acc_priv.max(attr.write_acl);
287+
}
288+
289+
let acc_priv = match acc_priv {
290+
AccessPrivilege::View => quote!(#krate::data_model::objects::Access::NEED_VIEW),
291+
AccessPrivilege::Operate => quote!(#krate::data_model::objects::Access::NEED_OPERATE),
292+
AccessPrivilege::Manage => quote!(#krate::data_model::objects::Access::NEED_MANAGE),
293+
AccessPrivilege::Administer => quote!(#krate::data_model::objects::Access::NEED_ADMIN),
294+
};
295+
296+
let mut access = quote!(#acc_rw.union(#acc_priv));
297+
298+
if attr.is_timed_write {
299+
access = quote!(#access.union(#krate::data_model::objects::Access::TIMED_ONLY));
300+
}
301+
302+
if attr.field.is_fabric_sensitive {
303+
access = quote!(#access.union(#krate::data_model::objects::Access::FAB_SENSITIVE));
304+
}
305+
306+
// TODO: Fabric Scoped seems to be on the struct level
307+
282308
quote!(
283309
#krate::data_model::objects::Attribute::new(
284310
AttributeId::#attr_name as _,
285-
#krate::data_model::objects::Access::RV, // TODO
286-
#krate::data_model::objects::Quality::SN, // TODO
311+
#access,
312+
#krate::data_model::objects::Quality::SN, // TODO: Info not present in the IDL
287313
),
288314
)
289315
});

0 commit comments

Comments
 (0)