trouble_host/types/
capabilities.rs1use crate::Error;
2
3#[derive(Debug, Clone, Copy, PartialEq, Eq)]
6pub enum IoCapabilities {
7 DisplayOnly,
9 DisplayYesNo,
11 KeyboardOnly,
13 NoInputNoOutput,
15 KeyboardDisplay,
17}
18
19impl TryFrom<u8> for IoCapabilities {
20 type Error = Error;
21 fn try_from(val: u8) -> Result<Self, Error> {
22 Ok(match val {
23 0x00 => Self::DisplayOnly,
24 0x01 => Self::DisplayYesNo,
25 0x02 => Self::KeyboardOnly,
26 0x03 => Self::NoInputNoOutput,
27 0x04 => Self::KeyboardDisplay,
28 _ => return Err(Error::InvalidValue),
29 })
30 }
31}
32
33impl From<IoCapabilities> for u8 {
34 fn from(val: IoCapabilities) -> u8 {
35 match val {
36 IoCapabilities::DisplayOnly => 0x00,
37 IoCapabilities::DisplayYesNo => 0x01,
38 IoCapabilities::KeyboardOnly => 0x02,
39 IoCapabilities::NoInputNoOutput => 0x03,
40 IoCapabilities::KeyboardDisplay => 0x04,
41 }
42 }
43}
44
45impl AsRef<str> for IoCapabilities {
46 fn as_ref(&self) -> &str {
47 match self {
48 IoCapabilities::DisplayOnly => "Display Only",
49 IoCapabilities::DisplayYesNo => "Display Yes/No",
50 IoCapabilities::KeyboardOnly => "Keyboard Only",
51 IoCapabilities::NoInputNoOutput => "No Input / No Output",
52 IoCapabilities::KeyboardDisplay => "Keyboard and Display",
53 }
54 }
55}
56
57impl core::fmt::Display for IoCapabilities {
58 fn fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result {
59 write!(f, "{}", self.as_ref())
60 }
61}
62
63#[cfg(feature = "defmt")]
64impl defmt::Format for IoCapabilities {
65 fn format(&self, fmt: defmt::Formatter) {
66 defmt::write!(fmt, "{}", self.as_ref())
67 }
68}