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