|
22 | 22 | use proc_macro2::{Ident, Literal, Span, TokenStream}; |
23 | 23 | use quote::quote; |
24 | 24 |
|
25 | | -use rs_matter_data_model::{Cluster, StructType}; |
| 25 | +use rs_matter_data_model::{AccessPrivilege, Cluster, StructType}; |
26 | 26 |
|
27 | 27 | use super::id::idl_attribute_name_to_enum_variant_name; |
28 | 28 | use super::IdlGenerateContext; |
@@ -279,11 +279,37 @@ pub fn cluster(cluster: &Cluster, context: &IdlGenerateContext) -> TokenStream { |
279 | 279 | Span::call_site(), |
280 | 280 | ); |
281 | 281 |
|
| 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 | + |
282 | 308 | quote!( |
283 | 309 | #krate::data_model::objects::Attribute::new( |
284 | 310 | 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 |
287 | 313 | ), |
288 | 314 | ) |
289 | 315 | }); |
|
0 commit comments