Add connectio nsettings types+builders

This commit is contained in:
Lucy 2022-01-12 15:30:53 -05:00
parent 6dd7eb9da4
commit 29550a9658
No known key found for this signature in database
GPG key ID: EBC517FAD666BBF1
3 changed files with 172 additions and 0 deletions

85
Cargo.lock generated
View file

@ -153,9 +153,45 @@ name = "cosmic-dbus-networkmanager"
version = "0.1.0"
dependencies = [
"bitflags",
"derive_builder",
"zbus",
]
[[package]]
name = "darling"
version = "0.12.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "5f2c43f534ea4b0b049015d00269734195e6d3f0f6635cb692251aca6f9f8b3c"
dependencies = [
"darling_core",
"darling_macro",
]
[[package]]
name = "darling_core"
version = "0.12.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8e91455b86830a1c21799d94524df0845183fa55bafd9aa137b01c7d1065fa36"
dependencies = [
"fnv",
"ident_case",
"proc-macro2",
"quote",
"strsim",
"syn",
]
[[package]]
name = "darling_macro"
version = "0.12.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "29b5acf0dea37a7f66f7b25d2c5e93fd46f8f6968b1a5d7a3e02e97768afc95a"
dependencies = [
"darling_core",
"quote",
"syn",
]
[[package]]
name = "derivative"
version = "2.2.0"
@ -167,6 +203,37 @@ dependencies = [
"syn",
]
[[package]]
name = "derive_builder"
version = "0.10.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d13202debe11181040ae9063d739fa32cfcaaebe2275fe387703460ae2365b30"
dependencies = [
"derive_builder_macro",
]
[[package]]
name = "derive_builder_core"
version = "0.10.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "66e616858f6187ed828df7c64a6d71720d83767a7f19740b2d1b6fe6327b36e5"
dependencies = [
"darling",
"proc-macro2",
"quote",
"syn",
]
[[package]]
name = "derive_builder_macro"
version = "0.10.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "58a94ace95092c5acb1e97a7e846b310cfbd499652f72297da7493f618a98d73"
dependencies = [
"derive_builder_core",
"syn",
]
[[package]]
name = "easy-parallel"
version = "3.2.0"
@ -209,6 +276,12 @@ dependencies = [
"instant",
]
[[package]]
name = "fnv"
version = "1.0.7"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1"
[[package]]
name = "futures-core"
version = "0.3.19"
@ -279,6 +352,12 @@ version = "0.4.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70"
[[package]]
name = "ident_case"
version = "1.0.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39"
[[package]]
name = "instant"
version = "0.1.12"
@ -528,6 +607,12 @@ version = "1.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f"
[[package]]
name = "strsim"
version = "0.10.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "73473c0e59e6d5812c5dfe2a064a6444949f089e20eec9a2e5506596494e4623"
[[package]]
name = "syn"
version = "1.0.85"

View file

@ -6,6 +6,7 @@ license = "MPL-2.0"
[dependencies]
bitflags = "1.3.2"
derive_builder = "0.10.2"
zbus = "2.0.0"
[features]

View file

@ -1,6 +1,7 @@
// SPDX-License-Identifier: MPL-2.0
use crate::interface::settings::connection::ConnectionSettingsProxy;
use derive_builder::Builder;
use std::ops::Deref;
pub struct Connection<'a>(ConnectionSettingsProxy<'a>);
@ -18,3 +19,88 @@ impl<'a> From<ConnectionSettingsProxy<'a>> for Connection<'a> {
Connection(conn)
}
}
macro_rules! derive_value_build {
($name:ident, $(($arg:ident: $arg_ty:ty)),*) => {
#[derive(Builder)]
pub struct $name {
$(
#[builder(setter(into, strip_option))]
$arg: Option<$arg_ty>,
)*
}
impl $name {
pub fn build<'a>(&'a self) -> std::collections::HashMap<String, zbus::zvariant::Value<'a>> {
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!(
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<String>),
(read_only: bool),
(secondaries: Vec<String>),
(stable_id: String),
(type_: String),
(uuid: String),
(wait_device_timeout: i32),
(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)
);
derive_value_build!(
WifiSettings,
(assigned_mac_address: String),
(band: String),
(bssid: Vec<u8>),
(channel: u32),
(cloned_mac_address: Vec<u8>),
(generate_mac_address_mask: String),
(hidden: bool),
(mac_address: Vec<u8>),
(mac_address_blacklist: Vec<String>),
(mac_address_randomization: u32),
(mode: String),
(mtu: u32),
(powersave: u32),
(rate: u32),
(seen_bssids: Vec<String>),
(ssid: Vec<u8>),
(tx_power: u32),
(wake_on_wlan: u32)
);
derive_value_build!(BluetoothSettings, (bdaddr: Vec<u8>), (type_: String));