passcod_networkmanager/devices/
mod.rs1mod any;
2mod bridge;
3mod generic;
4mod veth;
5mod wired;
6mod wireless;
7
8pub use self::any::Any;
9pub use self::bridge::Bridge;
10pub use self::generic::Generic;
11pub use self::veth::Veth;
12pub use self::wired::Wired;
13pub use self::wireless::Wireless;
14use crate::dbus_api::DBusAccessor;
15use crate::errors::Error;
16use crate::gen::OrgFreedesktopNetworkManagerDevice;
17use crate::types::DeviceType;
18use num_traits::FromPrimitive;
19
20#[derive(Clone, Debug)]
21pub enum Device {
22 WiFi(WiFiDevice),
23 Ethernet(EthernetDevice),
24 Generic(GenericDevice),
25 Bridge(BridgeDevice),
26 Veth(VethDevice),
27 UnsupportedDevice,
28}
29
30#[derive(Clone, Debug)]
31pub struct GenericDevice {
32 dbus_accessor: DBusAccessor,
33}
34
35#[derive(Clone, Debug)]
36pub struct WiFiDevice {
37 dbus_accessor: DBusAccessor,
38}
39
40#[derive(Clone, Debug)]
41pub struct EthernetDevice {
42 dbus_accessor: DBusAccessor,
43}
44
45#[derive(Clone, Debug)]
46pub struct BridgeDevice {
47 dbus_accessor: DBusAccessor,
48}
49
50#[derive(Clone, Debug)]
51pub struct VethDevice {
52 dbus_accessor: DBusAccessor,
53}
54
55impl Device {
56 pub(crate) fn new(dbus_accessor: DBusAccessor) -> Result<Self, Error> {
57 let dev_type = dbus_accessor.create_proxy().device_type()?;
58 match FromPrimitive::from_u32(dev_type) {
59 Some(x) => match x {
60 DeviceType::Wifi => Ok(Device::WiFi(WiFiDevice { dbus_accessor })),
61 DeviceType::Ethernet => Ok(Device::Ethernet(EthernetDevice { dbus_accessor })),
62 DeviceType::Generic => Ok(Device::Generic(GenericDevice { dbus_accessor })),
63 DeviceType::Bridge => Ok(Device::Bridge(BridgeDevice { dbus_accessor })),
64 DeviceType::Veth => Ok(Device::Veth(VethDevice { dbus_accessor })),
65 _ => Ok(Device::UnsupportedDevice),
66 },
67 None => Err(Error::UnsupportedType),
68 }
69 }
70}