ebyte_e32/parameters/option/
wakeup_time.rs1use crate::parameters::error::Error;
2
3#[cfg(feature = "value_enum")]
4use clap::ValueEnum;
5
6#[derive(Copy, Clone, Debug, PartialEq, Eq, Default)]
7#[cfg_attr(test, derive(proptest_derive::Arbitrary))]
8#[cfg_attr(feature = "value_enum", derive(ValueEnum))]
9pub enum WakeupTime {
10 #[default]
11 Ms250,
12 Ms500,
13 Ms750,
14 Ms1000,
15 Ms1250,
16 Ms1500,
17 Ms1750,
18 Ms2000,
19}
20
21impl TryFrom<u8> for WakeupTime {
22 type Error = Error;
23
24 fn try_from(value: u8) -> Result<Self, Self::Error> {
25 match value {
26 0 => Ok(Self::Ms250),
27 1 => Ok(Self::Ms500),
28 2 => Ok(Self::Ms750),
29 3 => Ok(Self::Ms1000),
30 4 => Ok(Self::Ms1250),
31 5 => Ok(Self::Ms1500),
32 6 => Ok(Self::Ms1750),
33 7 => Ok(Self::Ms2000),
34 _ => Err(Error::InvalidWakeupTime { value }),
35 }
36 }
37}
38
39impl From<WakeupTime> for u8 {
40 fn from(time: WakeupTime) -> Self {
41 match time {
42 WakeupTime::Ms250 => 0,
43 WakeupTime::Ms500 => 1,
44 WakeupTime::Ms750 => 2,
45 WakeupTime::Ms1000 => 3,
46 WakeupTime::Ms1250 => 4,
47 WakeupTime::Ms1500 => 5,
48 WakeupTime::Ms1750 => 6,
49 WakeupTime::Ms2000 => 7,
50 }
51 }
52}