passcod_networkmanager/devices/
mod.rs

1mod 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}