use super::types::{BrightnessClampedSource, IlluminationState, be16, illumination_state};
#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash)]
#[cfg_attr(feature = "serde", derive(serde::Serialize))]
#[non_exhaustive]
pub enum IlluminationEvent {
IlluminationChanged(IlluminationState),
BrightnessChanged(u16),
ColorTemperatureChanged(u16),
BrightnessEffectiveMaxChanged(u16),
BrightnessClamped {
source: BrightnessClampedSource,
brightness: u16,
},
}
pub(super) fn decode_event(sub_id: u8, payload: &[u8; 16]) -> Option<IlluminationEvent> {
match sub_id {
0 => Some(IlluminationEvent::IlluminationChanged(
illumination_state(payload[0]).ok()?,
)),
1 => Some(IlluminationEvent::BrightnessChanged(be16(payload, 0))),
2 => Some(IlluminationEvent::ColorTemperatureChanged(be16(payload, 0))),
3 => Some(IlluminationEvent::BrightnessEffectiveMaxChanged(be16(
payload, 0,
))),
4 => Some(IlluminationEvent::BrightnessClamped {
source: BrightnessClampedSource::try_from(payload[0]).ok()?,
brightness: be16(payload, 1),
}),
_ => None,
}
}