@@ -26,14 +26,11 @@ impl ToStatic for StatusChange<'_> {
2626 }
2727}
2828
29- impl < const N : usize > ToStatic for Cow < ' _ , [ u8 ; N ] > {
30- type Static = Cow < ' static , [ u8 ; N ] > ;
29+ impl ToStatic for WatercareInfo {
30+ type Static = WatercareInfo ;
3131
3232 fn to_static ( & self ) -> Self :: Static {
33- match * self {
34- Cow :: Owned ( x) => Cow :: Owned ( x) ,
35- Cow :: Borrowed ( x) => Cow :: Owned ( * x) ,
36- }
33+ self . clone ( )
3734 }
3835}
3936
@@ -78,10 +75,43 @@ pub struct ReminderInfo {
7875 pub valid : bool ,
7976}
8077
78+ #[ derive( Debug , Clone , PartialEq , Eq ) ]
79+ #[ cfg_attr( feature = "serialize" , derive( serde:: Serialize ) ) ]
80+ pub struct WatercareInfo {
81+ pub mode : u8 ,
82+ pub r#type : WatercareType ,
83+ pub index : u8 ,
84+ pub start_day : Weekday ,
85+ pub end_day : Weekday ,
86+ pub start_time : Time ,
87+ pub end_time : Time ,
88+ }
89+
90+ #[ derive( Clone , Copy , Debug , PartialEq , Eq , strum:: FromRepr ) ]
91+ #[ cfg_attr( feature = "serialize" , derive( serde:: Serialize ) ) ]
92+ #[ repr( u8 ) ]
93+ pub enum Weekday {
94+ Sunday = 0 ,
95+ Monday = 1 ,
96+ Tuesday = 2 ,
97+ Wednesday = 3 ,
98+ Thursday = 4 ,
99+ Friday = 5 ,
100+ Saturday = 6 ,
101+ }
102+
103+ #[ derive( Clone , Copy , Debug , PartialEq , Eq ) ]
104+ #[ cfg_attr( feature = "serialize" , derive( serde:: Serialize ) ) ]
105+ pub struct Time {
106+ pub hour : u8 ,
107+ pub minute : u8 ,
108+ }
109+
81110#[ derive( Clone , Copy , Debug , PartialEq , Eq , strum:: FromRepr ) ]
82111#[ cfg_attr( feature = "serialize" , derive( serde:: Serialize ) ) ]
83112#[ repr( u8 ) ]
84113pub enum WatercareType {
114+ Invalid = 0 ,
85115 Economy = 1 ,
86116 FilterCycle = 2 ,
87117}
@@ -100,6 +130,14 @@ impl<'a> ActualType for &'a [ReminderInfo] {
100130 type Type = Cow < ' a , [ ReminderInfo ] > ;
101131}
102132
133+ impl < ' a > ActualType for & ' a [ WatercareInfo ] {
134+ type Type = Cow < ' a , [ WatercareInfo ] > ;
135+ }
136+
137+ impl ActualType for WatercareInfo {
138+ type Type = WatercareInfo ;
139+ }
140+
103141macro_rules! actually_self {
104142 ( $ty: ty $( , $( $rest: tt) * ) ?) => {
105143 impl ActualType for $ty {
@@ -115,7 +153,7 @@ macro_rules! actually_self {
115153 } ;
116154 ( ) => { } ;
117155}
118- actually_self ! ( u8 , u16 , WatercareType ) ;
156+ actually_self ! ( u8 , u16 , WatercareType , Weekday ) ;
119157
120158pub mod package_data {
121159 use super :: * ;
@@ -205,14 +243,7 @@ pub mod package_data {
205243 ModifyWatercare {
206244 b"MDFWC" : Tag ,
207245 seq: u8 ,
208- mode: u8 ,
209- r#type: WatercareType ,
210- rule_index: u8 ,
211- unknown: & [ u8 ; 2 ] ,
212- start_hour: u8 ,
213- start_minute: u8 ,
214- end_hour: u8 ,
215- end_minutes: u8 ,
246+ info: WatercareInfo ,
216247 } ,
217248 DeleteWatercare {
218249 b"DELWC" : Tag ,
@@ -230,14 +261,7 @@ pub mod package_data {
230261 AddWatercare {
231262 b"ADDWC" : Tag ,
232263 seq: u8 ,
233- mode: u8 ,
234- r#type: WatercareType ,
235- index: u8 ,
236- unknown: & [ u8 ; 2 ] ,
237- start_hour: u8 ,
238- start_minute: u8 ,
239- end_hour: u8 ,
240- end_minutes: u8 ,
264+ info: WatercareInfo ,
241265 } ,
242266 WatercareAdded {
243267 b"WCADD" : Tag ,
@@ -269,7 +293,13 @@ pub mod package_data {
269293 RemindersSet {
270294 b"RMSET" : Tag ,
271295 } ,
272- WatercareRequest ( b"WCREQ" : Tailing ) ,
296+ WatercareRequest {
297+ b"WCREQ" : Tag ,
298+ index: u8 ,
299+ next_index: u8 ,
300+ schedule: & [ WatercareInfo ] ,
301+ } ,
302+ MalformedWatercareRequest ( b"WCREQ" : Tailing ) ,
273303 ChannelCurrent {
274304 b"CHCUR" : Tag ,
275305 channel: u8 ,
0 commit comments