Skip to main content

doip_definitions/doip_payload/
power_mode.rs

1use crate::error::{Error, Result};
2
3/// Used in `PowerInformationResponse`, `PowerMode` provides the power mode that
4/// the `DoIP` entity can be.
5#[cfg_attr(feature = "python-bindings", pyo3::pyclass(eq, eq_int))]
6#[derive(Clone, Copy, Debug, PartialEq)]
7pub enum PowerMode {
8    /// Not Ready
9    NotReady = 0x00,
10
11    /// Ready
12    Ready = 0x01,
13
14    /// Not Supported
15    NotSupported = 0x02,
16}
17
18impl From<PowerMode> for u8 {
19    fn from(value: PowerMode) -> Self {
20        value as u8
21    }
22}
23
24impl TryFrom<&u8> for PowerMode {
25    type Error = Error;
26
27    fn try_from(value: &u8) -> Result<Self> {
28        let val = *value;
29
30        match val {
31            v if v == PowerMode::NotReady as u8 => Ok(PowerMode::NotReady),
32            v if v == PowerMode::Ready as u8 => Ok(PowerMode::Ready),
33            v if v == PowerMode::NotSupported as u8 => Ok(PowerMode::NotSupported),
34            v => Err(Error::InvalidPowerMode { value: v }),
35        }
36    }
37}