1use crate::types::ZclType;
2
3#[derive(PartialEq, Debug, Copy, Clone)]
4pub enum ValueOrAttributeReference<T: ZclType> {
5 AttributeReference(u16),
7 Value(T),
9}
10
11#[derive(PartialEq, Debug, Copy, Clone)]
12pub enum AttributeRange<T: ZclType> {
13 Value,
15 Full,
18 FullWithNone,
20 InclusiveRange(ValueOrAttributeReference<T>, ValueOrAttributeReference<T>),
22 Size(usize),
24}
25
26#[derive(PartialEq, Eq, Debug, Copy, Clone)]
27pub enum AttributeSide {
28 Server,
29 Client,
30 Either,
31}
32
33#[derive(PartialEq, Debug, Copy, Clone)]
34pub struct Attribute<'a, T: ZclType> {
35 pub code: u16,
36 pub name: &'a str,
37 pub side: AttributeSide,
38 pub readable: bool,
39 pub writable: bool,
40 pub reportable: bool,
41 pub scene: bool,
42 pub mandatory: bool,
43 pub default: Option<T>,
44 pub range: AttributeRange<T>,
45}