From e6607317569c6c17c29bef7a43ddadce1050bf0d Mon Sep 17 00:00:00 2001 From: Lucy Date: Fri, 21 Jan 2022 10:50:31 -0500 Subject: [PATCH] Add a `Settings` type for all connection settings, and change bindings to use said type. --- networkmanager/Cargo.toml | 2 +- .../src/interface/settings/connection.rs | 31 +---- networkmanager/src/settings/connection.rs | 129 +++++++++--------- 3 files changed, 71 insertions(+), 91 deletions(-) diff --git a/networkmanager/Cargo.toml b/networkmanager/Cargo.toml index ac846f1..4fb4f05 100644 --- a/networkmanager/Cargo.toml +++ b/networkmanager/Cargo.toml @@ -7,7 +7,7 @@ license = "MPL-2.0" [dependencies] bitflags = "1.3.2" derive_builder = "0.10.2" -serde = { version = "1.0.134", features = ["derive"] } zbus = "2.0.1" +zvariant = "3.1.0" [features] diff --git a/networkmanager/src/interface/settings/connection.rs b/networkmanager/src/interface/settings/connection.rs index 6453c79..2a33d7f 100644 --- a/networkmanager/src/interface/settings/connection.rs +++ b/networkmanager/src/interface/settings/connection.rs @@ -20,6 +20,7 @@ //! //! …consequently `zbus-xmlgen` did not generate code for the above interfaces. +use crate::settings::connection::Settings; use zbus::dbus_proxy; #[dbus_proxy( @@ -45,46 +46,24 @@ pub trait ConnectionSettings { >; /// GetSettings method - fn get_settings( - &self, - ) -> zbus::Result< - std::collections::HashMap< - String, - std::collections::HashMap, - >, - >; + fn get_settings(&self) -> zbus::Result; /// Save method fn save(&self) -> zbus::Result<()>; /// Update method - fn update( - &self, - properties: std::collections::HashMap< - &str, - std::collections::HashMap<&str, zbus::zvariant::Value<'_>>, - >, - ) -> zbus::Result<()>; + fn update(&self, properties: &Settings) -> zbus::Result<()>; /// Update2 method fn update2( &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>; /// UpdateUnsaved method - fn update_unsaved( - &self, - properties: std::collections::HashMap< - &str, - std::collections::HashMap<&str, zbus::zvariant::Value<'_>>, - >, - ) -> zbus::Result<()>; + fn update_unsaved(&self, properties: &Settings) -> zbus::Result<()>; /// Removed signal #[dbus_proxy(signal)] diff --git a/networkmanager/src/settings/connection.rs b/networkmanager/src/settings/connection.rs index 17f76cb..c76b304 100644 --- a/networkmanager/src/settings/connection.rs +++ b/networkmanager/src/settings/connection.rs @@ -21,87 +21,88 @@ impl<'a> From> for Connection<'a> { } macro_rules! derive_value_build { - ($name:ident, $(($arg:ident: $arg_ty:ty)),*) => { - #[derive(Builder, serde::Deserialize, serde::Serialize)] + ($name:ident, $(($arg:ident($rename:expr): $arg_ty:ty)),*) => { + #[derive(Builder, Clone, zbus::zvariant::DeserializeDict, zbus::zvariant::SerializeDict, zbus::zvariant::Type)] pub struct $name { $( + #[zvariant(rename = $rename)] #[builder(setter(into, strip_option))] - #[serde(skip_serializing_if = "Option::is_none")] - $arg: Option<$arg_ty>, + pub $arg: Option<$arg_ty>, )* } - impl $name { - pub fn build<'a>(&'a self) -> std::collections::HashMap> { - let mut out = std::collections::HashMap::new(); - $( - if let Some(val) = &self.$arg { - out.insert(stringify!($arg).trim_end_matches("_").replace("_", "-"), zbus::zvariant::Value::from(val)); - } - )* - out - } - } }; } +derive_value_build!( + Settings, + (connection("connection"): ConnectionSettings), + (ethernet("802-3-ethernet"): EthernetSettings), + (wifi("802-11-wireless"): WifiSettings), + (bluetooth("bluetooth"): BluetoothSettings) +); + derive_value_build!( ConnectionSettings, - (auth_retries: i32), - (autoconnect: bool), - (autoconnect_priority: i32), - (autoconnect_retries: i32), - (gateway_ping_timeout: u32), - (id: String), - (interface_name: String), - (lldp: i32), - (llmnr: i32), - (master: String), - (mdns: i32), - (mud_url: String), - (multi_connect: String), - (permissions: Vec), - (read_only: bool), - (secondaries: Vec), - (stable_id: String), - (type_: String), - (uuid: String), - (wait_device_timeout: i32), - (zone: String) + (auth_retries("auth-retries"): i32), + (autoconnect("autoconnect"): bool), + (autoconnect_priority("autoconnect-priority"): i32), + (autoconnect_retries("autoconnect-retries"): i32), + (gateway_ping_timeout("gateway-ping-timeout"): u32), + (id("id"): String), + (interface_name("interface-name"): String), + (lldp("lldp"): i32), + (llmnr("llmnr"): i32), + (master("master"): String), + (mdns("mdns"): i32), + (mud_url("mud_url"): String), + (multi_connect("multi-connect"): String), + (permissions("permissions"): Vec), + (read_only("read-only"): bool), + (secondaries("secondaries"): Vec), + (stable_id("stable-id"): String), + (type_("type"): String), + (uuid("uuid"): String), + (wait_device_timeout("wait-device-timeout"): i32), + (zone("zone"): String) ); derive_value_build!( EthernetSettings, - (assigned_mac_address: String), - (auto_negotiate: bool), - (duplex: String), - (generate_mac_address_mask: String), - (mtu: u32), - (port: String), - (speed: u32), - (wake_on_lan: u32), - (wake_on_lan_password: String) + (assigned_mac_address("assigned-mac-address"): String), + (auto_negotiate("auto-negotiate"): bool), + (duplex("duplex"): String), + (generate_mac_address_mask("generate-mac-address-mask"): String), + (mtu("mtu"): u32), + (port("port"): String), + (speed("speed"): u32), + (wake_on_lan("wake-on-lan"): u32), + (wake_on_lan_password("wake-on-lan-password"): String) ); derive_value_build!( WifiSettings, - (assigned_mac_address: String), - (band: String), - (bssid: Vec), - (channel: u32), - (cloned_mac_address: Vec), - (generate_mac_address_mask: String), - (hidden: bool), - (mac_address: Vec), - (mac_address_blacklist: Vec), - (mac_address_randomization: u32), - (mode: String), - (mtu: u32), - (powersave: u32), - (rate: u32), - (seen_bssids: Vec), - (ssid: Vec), - (tx_power: u32), - (wake_on_wlan: u32) + (assigned_mac_address("assigned-mac-address"): String), + (band("band"): String), + (bssid("bssid"): Vec), + (channel("channel"): u32), + (cloned_mac_address("cloned-mac-address"): Vec), + (generate_mac_address_mask("generate-mac-address-mask"): String), + (hidden("hidden"): bool), + (mac_address("mac-address"): Vec), + (mac_address_blacklist("mac-address-blacklist"): Vec), + (mac_address_randomization("mac-address-randomization"): u32), + (mode("mode"): String), + (mtu("mtu"): u32), + (powersave("powersave"): u32), + (rate("rate"): u32), + (seen_bssids("seen-bssids"): Vec), + (ssid("ssid"): Vec), + (tx_power("tx-power"): u32), + (wake_on_wlan("wake-on-wlan"): u32) ); -derive_value_build!(BluetoothSettings, (bdaddr: Vec), (type_: String)); +derive_value_build!( + BluetoothSettings, + (bdaddr("bdaddr"): Vec), + (type_("type"): String) +);