ebyte_e32/parameters/
air_baudrate.rs

1use super::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 AirBaudRate {
10    Bps300,
11    Bps1200,
12    #[default]
13    Bps2400,
14    Bps4800,
15    Bps9600,
16    Bps19200,
17}
18
19impl TryFrom<u8> for AirBaudRate {
20    type Error = super::Error;
21
22    fn try_from(value: u8) -> Result<Self, Self::Error> {
23        match value {
24            0 => Ok(Self::Bps300),
25            1 => Ok(Self::Bps1200),
26            2 => Ok(Self::Bps2400),
27            3 => Ok(Self::Bps4800),
28            4 => Ok(Self::Bps9600),
29            5 | 6 | 7 => Ok(Self::Bps19200),
30            _ => Err(Error::InvalidBaudrate { rate: value }),
31        }
32    }
33}
34
35impl From<AirBaudRate> for u8 {
36    fn from(rate: AirBaudRate) -> Self {
37        match rate {
38            AirBaudRate::Bps300 => 0,
39            AirBaudRate::Bps1200 => 1,
40            AirBaudRate::Bps2400 => 2,
41            AirBaudRate::Bps4800 => 3,
42            AirBaudRate::Bps9600 => 4,
43            AirBaudRate::Bps19200 => 5,
44        }
45    }
46}