hyperion/instance/muxer/
muxed_message.rs1use std::{convert::TryFrom, sync::Arc};
2
3use super::InputMessageData;
4use crate::{image::RawImage, models::Color};
5
6#[derive(Debug, Clone)]
7pub struct MuxedMessage {
8 data: MuxedMessageData,
9}
10
11impl MuxedMessage {
12 pub fn new(data: MuxedMessageData) -> Self {
13 Self { data }
14 }
15
16 pub fn data(&self) -> &MuxedMessageData {
17 &self.data
18 }
19}
20
21impl std::ops::Deref for MuxedMessage {
22 type Target = MuxedMessageData;
23
24 fn deref(&self) -> &Self::Target {
25 &self.data
26 }
27}
28
29#[derive(Debug, Clone)]
30#[allow(unused)]
31pub enum MuxedMessageData {
32 SolidColor {
33 priority: i32,
34 duration: Option<chrono::Duration>,
35 color: Color,
36 },
37 Image {
38 priority: i32,
39 duration: Option<chrono::Duration>,
40 image: Arc<RawImage>,
41 },
42 LedColors {
43 priority: i32,
44 duration: Option<chrono::Duration>,
45 led_colors: Arc<Vec<Color>>,
46 },
47}
48
49impl MuxedMessageData {
50 pub fn priority(&self) -> i32 {
51 match self {
52 MuxedMessageData::SolidColor { priority, .. } => *priority,
53 MuxedMessageData::Image { priority, .. } => *priority,
54 MuxedMessageData::LedColors { priority, .. } => *priority,
55 }
56 }
57
58 pub fn color(&self) -> Option<Color> {
59 match self {
60 MuxedMessageData::SolidColor { color, .. } => Some(*color),
61 _ => None,
62 }
63 }
64}
65
66impl TryFrom<InputMessageData> for MuxedMessageData {
67 type Error = ();
68
69 fn try_from(value: InputMessageData) -> Result<Self, Self::Error> {
70 match value {
71 InputMessageData::ClearAll
72 | InputMessageData::Clear { .. }
73 | InputMessageData::Effect { .. } => Err(()),
74 InputMessageData::SolidColor {
75 priority,
76 duration,
77 color,
78 } => Ok(Self::SolidColor {
79 priority,
80 duration,
81 color,
82 }),
83 InputMessageData::Image {
84 priority,
85 duration,
86 image,
87 } => Ok(Self::Image {
88 priority,
89 duration,
90 image,
91 }),
92 InputMessageData::LedColors {
93 priority,
94 duration,
95 led_colors,
96 } => Ok(Self::LedColors {
97 priority,
98 duration,
99 led_colors,
100 }),
101 }
102 }
103}