From e2c2fdea8f05fb89e486e7f7353669f268687cf9 Mon Sep 17 00:00:00 2001 From: Lucy Date: Fri, 21 Jan 2022 11:01:06 -0500 Subject: [PATCH] Add settings bindings --- networkmanager/src/interface/settings.rs | 16 ++++----------- networkmanager/src/nm.rs | 10 +++++++--- networkmanager/src/settings.rs | 25 ++++++++++++++++++++++++ 3 files changed, 36 insertions(+), 15 deletions(-) diff --git a/networkmanager/src/interface/settings.rs b/networkmanager/src/interface/settings.rs index fcdd08e..9c82c03 100644 --- a/networkmanager/src/interface/settings.rs +++ b/networkmanager/src/interface/settings.rs @@ -22,6 +22,7 @@ pub mod connection; +use crate::settings::connection::Settings; use zbus::dbus_proxy; #[dbus_proxy( @@ -33,19 +34,13 @@ pub trait Settings { /// AddConnection method fn add_connection( &self, - connection: std::collections::HashMap< - &str, - std::collections::HashMap<&str, zbus::zvariant::Value<'_>>, - >, + connection: &Settings, ) -> zbus::Result; /// AddConnection2 method fn add_connection2( &self, - settings: std::collections::HashMap< - &str, - std::collections::HashMap<&str, zbus::zvariant::Value<'_>>, - >, + settings: &Settings, flags: u32, args: std::collections::HashMap<&str, zbus::zvariant::Value<'_>>, ) -> zbus::Result<( @@ -56,10 +51,7 @@ pub trait Settings { /// AddConnectionUnsaved method fn add_connection_unsaved( &self, - connection: std::collections::HashMap< - &str, - std::collections::HashMap<&str, zbus::zvariant::Value<'_>>, - >, + connection: &Settings, ) -> zbus::Result; /// GetConnectionByUuid method diff --git a/networkmanager/src/nm.rs b/networkmanager/src/nm.rs index 50d959b..72a0e12 100644 --- a/networkmanager/src/nm.rs +++ b/networkmanager/src/nm.rs @@ -9,7 +9,7 @@ use crate::{ enums::{ConnectivityState, State}, NetworkManagerProxy, }, - settings::connection::Connection, + settings::{connection::Connection, NetworkManagerSettings}, }; use zbus::{zvariant::ObjectPath, Result}; @@ -80,7 +80,11 @@ impl<'a> NetworkManager<'a> { Ok(out) } - pub async fn state(&self) -> State { - self.0.state().await.map(State::from).unwrap() + pub async fn state(&self) -> Result { + self.0.state().await.map(State::from) + } + + pub async fn settings(&'a self) -> Result> { + NetworkManagerSettings::new(self.0.connection()).await } } diff --git a/networkmanager/src/settings.rs b/networkmanager/src/settings.rs index 4d5ecc8..6c1123d 100644 --- a/networkmanager/src/settings.rs +++ b/networkmanager/src/settings.rs @@ -1,3 +1,28 @@ // SPDX-License-Identifier: MPL-2.0 pub mod connection; + +use self::connection::Connection; +use crate::interface::settings::{connection::ConnectionSettingsProxy, SettingsProxy}; +use zbus::Result; + +pub struct NetworkManagerSettings<'a>(SettingsProxy<'a>); + +impl<'a> NetworkManagerSettings<'a> { + pub async fn new(connection: &'a zbus::Connection) -> Result> { + SettingsProxy::new(connection).await.map(Self) + } + + pub async fn list_connections(&'a self) -> Result>> { + let connections = self.0.list_connections().await?; + let mut out = Vec::with_capacity(connections.len()); + for connection in connections { + let connection = ConnectionSettingsProxy::builder(self.0.connection()) + .path(connection)? + .build() + .await?; + out.push(connection.into()); + } + Ok(out) + } +}