networkmanager/
networkmanager.rs1use crate::dbus_api::DBusAccessor;
2use crate::devices::Device;
3use crate::errors::Error;
4use crate::gen::OrgFreedesktopNetworkManager;
5use crate::types::ReloadFlag;
6use dbus::blocking::Connection;
7
8use num_traits::ToPrimitive;
9
10const NETWORK_MANAGER_BUS: &str = "org.freedesktop.NetworkManager";
11const NETWORK_MANAGER_PATH: &str = "/org/freedesktop/NetworkManager";
12
13pub struct NetworkManager<'a> {
14 dbus_accessor: DBusAccessor<'a>,
15}
16
17impl<'a> NetworkManager<'a> {
18 pub fn new(dbus_connection: &'a Connection) -> Self {
19 NetworkManager {
20 dbus_accessor: DBusAccessor::new(
21 dbus_connection,
22 NETWORK_MANAGER_BUS,
23 NETWORK_MANAGER_PATH,
24 ),
25 }
26 }
27
28 fn paths_to_devices(&self, paths: Vec<dbus::Path<'_>>) -> Result<Vec<Device<'_>>, Error> {
29 let mut res = Vec::new();
30 for path in paths {
31 res.push(Device::new(DBusAccessor::new(
32 self.dbus_accessor.connection,
33 &self.dbus_accessor.bus,
34 &path,
35 ))?);
36 }
37 Ok(res)
38 }
39
40 fn path_to_device(&self, path: dbus::Path<'_>) -> Result<Device<'_>, Error> {
41 Device::new(DBusAccessor::new(
42 self.dbus_accessor.connection,
43 &self.dbus_accessor.bus,
44 &path,
45 ))
46 }
47
48 pub fn reload(&self, flags: ReloadFlag) -> Result<(), Error> {
50 match ToPrimitive::to_u32(&flags) {
51 Some(x) => Ok(proxy!(self).reload(x)?),
52 None => Err(Error::UnsupportedType),
53 }
54 }
55
56 pub fn get_devices(&self) -> Result<Vec<Device<'_>>, Error> {
58 let dev_paths = proxy!(self).get_devices()?;
59 self.paths_to_devices(dev_paths)
60 }
61
62 pub fn get_all_devices(&self) -> Result<Vec<Device<'_>>, Error> {
64 let dev_paths = proxy!(self).get_all_devices()?;
65 self.paths_to_devices(dev_paths)
66 }
67
68 pub fn get_device_by_ip_iface(&self, iface: &str) -> Result<Device<'_>, Error> {
69 let dev_path = proxy!(self).get_device_by_ip_iface(iface)?;
70 self.path_to_device(dev_path)
71 }
72
73 pub fn networking_enabled(&self) -> Result<bool, Error> {
74 Ok(proxy!(self).networking_enabled()?)
75 }
76
77 pub fn wireless_enabled(&self) -> Result<bool, Error> {
78 Ok(proxy!(self).wireless_enabled()?)
79 }
80
81 pub fn wireless_hardware_enabled(&self) -> Result<bool, Error> {
82 Ok(proxy!(self).wireless_hardware_enabled()?)
83 }
84
85 pub fn startup(&self) -> Result<bool, Error> {
87 Ok(proxy!(self).startup()?)
88 }
89}