use crate::types::ZclType;
#[derive(PartialEq, Debug, Copy, Clone)]
pub enum ValueOrAttributeReference<T: ZclType> {
AttributeReference(u16),
Value(T),
}
#[derive(PartialEq, Debug, Copy, Clone)]
pub enum AttributeRange<T: ZclType> {
Value,
Full,
FullWithNone,
InclusiveRange(ValueOrAttributeReference<T>, ValueOrAttributeReference<T>),
Size(usize),
}
#[derive(PartialEq, Eq, Debug, Copy, Clone)]
pub enum AttributeSide {
Server,
Client,
Either,
}
#[derive(PartialEq, Debug, Copy, Clone)]
pub struct Attribute<'a, T: ZclType> {
pub code: u16,
pub name: &'a str,
pub side: AttributeSide,
pub readable: bool,
pub writable: bool,
pub reportable: bool,
pub scene: bool,
pub mandatory: bool,
pub default: Option<T>,
pub range: AttributeRange<T>,
}