ebyte_e32/parameters/
baudrate.rs1use 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}