ebyte_e32/parameters/option/
wakeup_time.rs

1use 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}