ebyte_e32/parameters/option/
transmission_power.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 TransmissionPower {
10    #[default]
11    Dbm30,
12    Dbm27,
13    Dbm24,
14    Dbm21,
15}
16
17impl TryFrom<u8> for TransmissionPower {
18    type Error = Error;
19
20    fn try_from(value: u8) -> Result<Self, Self::Error> {
21        match value {
22            0 => Ok(Self::Dbm30),
23            1 => Ok(Self::Dbm27),
24            2 => Ok(Self::Dbm24),
25            3 => Ok(Self::Dbm21),
26            _ => Err(Error::InvalidTransmissionPower { value }),
27        }
28    }
29}
30
31impl From<TransmissionPower> for u8 {
32    fn from(power: TransmissionPower) -> Self {
33        match power {
34            TransmissionPower::Dbm30 => 0,
35            TransmissionPower::Dbm27 => 1,
36            TransmissionPower::Dbm24 => 2,
37            TransmissionPower::Dbm21 => 3,
38        }
39    }
40}