From a75f46a6d4d099c6f7f29234adacd9084588c619 Mon Sep 17 00:00:00 2001 From: Jan Luca Date: Mon, 22 Dec 2025 14:35:37 +0100 Subject: [PATCH 01/10] add voltage_max_design --- upower/src/device.rs | 3 +++ 1 file changed, 3 insertions(+) diff --git a/upower/src/device.rs b/upower/src/device.rs index b889e2e..bea86fa 100644 --- a/upower/src/device.rs +++ b/upower/src/device.rs @@ -183,6 +183,9 @@ pub trait Device { #[zbus(property)] fn voltage_min_design(&self) -> zbus::Result; + #[zbus(property)] + fn voltage_max_design(&self) -> zbus::Result; + #[zbus(signal)] fn enable_charge_threshold(&self, message: bool) -> zbus::Result<()>; From 54c7b63edf32951c2d5b24e2132b767309b58448 Mon Sep 17 00:00:00 2001 From: Jan Luca Date: Wed, 24 Dec 2025 14:31:09 +0100 Subject: [PATCH 02/10] fix up methods --- upower/src/device.rs | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/upower/src/device.rs b/upower/src/device.rs index bea86fa..e3b0f9f 100644 --- a/upower/src/device.rs +++ b/upower/src/device.rs @@ -187,15 +187,14 @@ pub trait Device { fn voltage_max_design(&self) -> zbus::Result; + fn get_history(&self, type_: String, timespan: u32, resolution: u32) -> zbus::Result>; + + fn get_statistics(&self, type_: String) -> zbus::Result>; + + #[zbus(signal)] fn enable_charge_threshold(&self, message: bool) -> zbus::Result<()>; - #[zbus(signal)] - fn get_history(&self, type_: String, timespan: u32, resolution: u32) -> zbus::Result>; - - #[zbus(signal)] - fn get_statistics(&self, type_: String) -> zbus::Result<()>; - #[zbus(signal)] fn refresh(&self) -> zbus::Result<()>; } From 0d3d049516b533272a26a78824120951e4349da5 Mon Sep 17 00:00:00 2001 From: Jan Luca Oster Date: Fri, 26 Dec 2025 10:22:58 +0100 Subject: [PATCH 03/10] cargo fmt --- upower/src/device.rs | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/upower/src/device.rs b/upower/src/device.rs index e3b0f9f..fb5010f 100644 --- a/upower/src/device.rs +++ b/upower/src/device.rs @@ -132,7 +132,7 @@ pub trait Device { #[zbus(property)] fn is_rechargeable(&self) -> zbus::Result; - #[deprecated(since="0.3.2", note="deprecated since 0.99.12")] + #[deprecated(since = "0.3.2", note = "deprecated since 0.99.12")] #[zbus(property)] fn luminosity(&self) -> zbus::Result; @@ -186,12 +186,15 @@ pub trait Device { #[zbus(property)] fn voltage_max_design(&self) -> zbus::Result; - - fn get_history(&self, type_: String, timespan: u32, resolution: u32) -> zbus::Result>; + fn get_history( + &self, + type_: String, + timespan: u32, + resolution: u32, + ) -> zbus::Result>; fn get_statistics(&self, type_: String) -> zbus::Result>; - #[zbus(signal)] fn enable_charge_threshold(&self, message: bool) -> zbus::Result<()>; From ee60f306f37958ceb3782cf5b30af29cce09e86e Mon Sep 17 00:00:00 2001 From: Ashley Wulber Date: Fri, 19 Dec 2025 11:39:25 -0500 Subject: [PATCH 04/10] chore: add secret agent --- Cargo.toml | 1 + nm-secret-agent-manager/Cargo.toml | 7 +++++++ nm-secret-agent-manager/src/lib.rs | 30 ++++++++++++++++++++++++++++++ 3 files changed, 38 insertions(+) create mode 100644 nm-secret-agent-manager/Cargo.toml create mode 100644 nm-secret-agent-manager/src/lib.rs diff --git a/Cargo.toml b/Cargo.toml index a9eb064..ca4da52 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -12,6 +12,7 @@ members = [ "locale1", "mpris2", "networkmanager", + "secret-agent", "switcheroo-control", "timedate", "upower", diff --git a/nm-secret-agent-manager/Cargo.toml b/nm-secret-agent-manager/Cargo.toml new file mode 100644 index 0000000..4610f81 --- /dev/null +++ b/nm-secret-agent-manager/Cargo.toml @@ -0,0 +1,7 @@ +[package] +name = "nm-secret-agent-manager" +version = "0.1.0" +edition = "2024" + +[dependencies] +zbus.workspace = true diff --git a/nm-secret-agent-manager/src/lib.rs b/nm-secret-agent-manager/src/lib.rs new file mode 100644 index 0000000..c04411a --- /dev/null +++ b/nm-secret-agent-manager/src/lib.rs @@ -0,0 +1,30 @@ +//! # D-Bus interface proxy for: `org.freedesktop.NetworkManager.AgentManager` +//! +//! This code was generated by `zbus-xmlgen` `5.0.0` from D-Bus introspection data. +//! Source: `test.xml`. +//! +//! You may prefer to adapt it, instead of using it verbatim. +//! +//! More information can be found in the [Writing a client proxy] section of the zbus +//! documentation. +//! +//! +//! [Writing a client proxy]: https://dbus2.github.io/zbus/client.html +//! [D-Bus standard interfaces]: https://dbus.freedesktop.org/doc/dbus-specification.html#standard-interfaces, +use zbus::proxy; +#[proxy( + interface = "org.freedesktop.NetworkManager.AgentManager", + default_service = "org.freedesktop.NetworkManager", + default_path = "/org/freedesktop/NetworkManager/AgentManager", + assume_defaults = true +)] +pub trait AgentManager { + /// Register method + fn register(&self, identifier: &str) -> zbus::Result<()>; + + /// RegisterWithCapabilities method + fn register_with_capabilities(&self, identifier: &str, capabilities: u32) -> zbus::Result<()>; + + /// Unregister method + fn unregister(&self) -> zbus::Result<()>; +} From 70ed219735e312ac8cc3f592a01fa8023f36939b Mon Sep 17 00:00:00 2001 From: Ashley Wulber Date: Wed, 31 Dec 2025 11:16:08 -0500 Subject: [PATCH 05/10] fix: typo --- Cargo.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Cargo.toml b/Cargo.toml index ca4da52..08bac86 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -12,7 +12,7 @@ members = [ "locale1", "mpris2", "networkmanager", - "secret-agent", + "nm-secret-agent-manager", "switcheroo-control", "timedate", "upower", From 87c3c35666b926a24a1e8045fd70be2db1145e34 Mon Sep 17 00:00:00 2001 From: TMilburnPodPoint <94366091+TMilburnPodPoint@users.noreply.github.com> Date: Thu, 8 Jan 2026 18:29:20 +0000 Subject: [PATCH 06/10] fix(timedate): configure properties as having no change signal --- timedate/src/lib.rs | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/timedate/src/lib.rs b/timedate/src/lib.rs index 2ffc671..00d6467 100644 --- a/timedate/src/lib.rs +++ b/timedate/src/lib.rs @@ -46,7 +46,7 @@ pub trait TimeDate { fn set_timezone(&self, timezone: &str, interactive: bool) -> zbus::Result<()>; /// Shows whether a service to perform time synchronization over network is available. - #[zbus(property, name = "CanNTP")] + #[zbus(property(emits_changed_signal = "false"), name = "CanNTP")] fn can_ntp(&self) -> zbus::Result; /// Shows whether the RTC is configured to use UTC or the local time zone. @@ -58,15 +58,15 @@ pub trait TimeDate { fn ntp(&self) -> zbus::Result; /// Shows whether the kernel reports the time as synchronized. - #[zbus(property, name = "NTPSynchronized")] + #[zbus(property(emits_changed_signal = "false"), name = "NTPSynchronized")] fn ntp_synchronized(&self) -> zbus::Result; /// Shows the current time in RTC. - #[zbus(property, name = "RTCTimeUSec")] + #[zbus(property(emits_changed_signal = "false"), name = "RTCTimeUSec")] fn rtctime_usec(&self) -> zbus::Result; /// Shows the current time. - #[zbus(property, name = "TimeUSec")] + #[zbus(property(emits_changed_signal = "false"), name = "TimeUSec")] fn time_usec(&self) -> zbus::Result; /// Shows the currently-configured time zone. From 755442641e328b727282c45b561a24c6fce74a12 Mon Sep 17 00:00:00 2001 From: Jan Date: Fri, 13 Feb 2026 01:18:07 +0100 Subject: [PATCH 07/10] feat(switcheroo): `Discrete` parameter support with fallback to `!default` --- switcheroo-control/src/lib.rs | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/switcheroo-control/src/lib.rs b/switcheroo-control/src/lib.rs index 30d5c8b..5b7bba1 100644 --- a/switcheroo-control/src/lib.rs +++ b/switcheroo-control/src/lib.rs @@ -103,11 +103,16 @@ impl TryFrom> for Gpu { .get("Default") .ok_or(zvariant::Error::IncorrectType)? .try_into()?; + let discrete = value + .get("Discrete") + .and_then(|v| v.try_into().ok()) + .unwrap_or(!default); Ok(Self { name, environment, default, + discrete, }) } } @@ -125,4 +130,5 @@ pub struct Gpu { pub name: String, pub environment: HashMap, pub default: bool, + pub discrete: bool, } From 0fa672f8dadb884001ef9a251b149ed432879629 Mon Sep 17 00:00:00 2001 From: Jan200101 Date: Fri, 13 Feb 2026 18:37:34 +0100 Subject: [PATCH 08/10] fix(switcher): explicitly type default so it can be used as a fallback Without typing unwrap_or doesn't know cannot use it as a fallback. --- switcheroo-control/src/lib.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/switcheroo-control/src/lib.rs b/switcheroo-control/src/lib.rs index 5b7bba1..b4fb6f8 100644 --- a/switcheroo-control/src/lib.rs +++ b/switcheroo-control/src/lib.rs @@ -99,7 +99,7 @@ impl TryFrom> for Gpu { .chunks_exact(2) .map(|chunk| (chunk[0].clone(), chunk[1].clone())) .collect(); - let default = value + let default: bool = value .get("Default") .ok_or(zvariant::Error::IncorrectType)? .try_into()?; From cc80763ffc361e41b2d5ce8595bcc1b05ff19493 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Vuka=C5=A1in=20Vojinovi=C4=87?= <150025636+git-f0x@users.noreply.github.com> Date: Fri, 13 Mar 2026 14:17:49 +0100 Subject: [PATCH 09/10] refactor: replace `time` with `jiff` Also updates the `timedatectl` example from `chrono` to `jiff`. --- Cargo.toml | 2 +- mpris2/Cargo.toml | 2 +- mpris2/examples/list.rs | 2 +- mpris2/src/metadata.rs | 28 ++++++++++++---------------- mpris2/src/player.rs | 16 +++++++--------- networkmanager/Cargo.toml | 2 +- networkmanager/src/access_point.rs | 3 +-- networkmanager/src/util.rs | 6 +++--- timedate/Cargo.toml | 3 +-- timedate/examples/timedatectl.rs | 23 +++++++++++++---------- 10 files changed, 41 insertions(+), 46 deletions(-) diff --git a/Cargo.toml b/Cargo.toml index 08bac86..7c6bcd2 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -23,7 +23,7 @@ futures-channel = "0.3.31" futures-util = "0.3.31" serde = { version = "1.0", features = ["derive"] } thiserror = "2.0" -time = { version = "0.3", features = ["parsing"] } +jiff = "0.2" tracing = "0.1.41" zbus = { version = "5.11.0" } zvariant = { version = "5.7.0" } diff --git a/mpris2/Cargo.toml b/mpris2/Cargo.toml index 807064b..947f508 100644 --- a/mpris2/Cargo.toml +++ b/mpris2/Cargo.toml @@ -9,7 +9,7 @@ license = "MPL-2.0" futures-util.workspace = true serde.workspace = true thiserror.workspace = true -time.workspace = true +jiff.workspace = true zbus.workspace = true zvariant.workspace = true diff --git a/mpris2/examples/list.rs b/mpris2/examples/list.rs index 778ef83..9c9b234 100644 --- a/mpris2/examples/list.rs +++ b/mpris2/examples/list.rs @@ -43,7 +43,7 @@ async fn main() -> Result<()> { .await .into_diagnostic() .wrap_err_with(|| format!("Failed to get position for media player '{}'", name))? - .map(|s| format!("{} seconds", s.as_seconds_f32())) + .map(|s| format!("{} seconds", s.as_secs_f32())) .unwrap_or_else(|| "N/A".to_owned()); println!("\tPosition: {}", position); if !player diff --git a/mpris2/src/metadata.rs b/mpris2/src/metadata.rs index 704054b..c9ef7b8 100644 --- a/mpris2/src/metadata.rs +++ b/mpris2/src/metadata.rs @@ -1,11 +1,11 @@ // SPDX-License-Identifier: MPL-2.0 use crate::error::{Error, Result}; +use jiff::{SignedDuration, Timestamp}; use std::{ collections::HashMap, fmt, ops::{Deref, DerefMut}, }; -use time::{Duration, OffsetDateTime}; use zbus::zvariant::{OwnedObjectPath, Value as ZValue}; #[derive(Debug, Clone, PartialEq)] @@ -90,7 +90,7 @@ impl Metadata { } /// `xesam:contentCreated`: When the track was created. Usually only the year component will be useful. - pub fn created(&self) -> Option { + pub fn created(&self) -> Option { self.inner .get("xesam:contentCreated") .cloned() @@ -106,7 +106,7 @@ impl Metadata { } /// `xesam:firstUsed`: When the track was first played. - pub fn first_played(&self) -> Option { + pub fn first_played(&self) -> Option { self.inner .get("xesam:firstUsed") .cloned() @@ -128,7 +128,7 @@ impl Metadata { } /// `xesam:lastUsed`: When the track was last played. - pub fn last_played(&self) -> Option { + pub fn last_played(&self) -> Option { self.inner .get("xesam:lastUsed") .cloned() @@ -199,7 +199,7 @@ impl Metadata { } /// `mpris:length`: The length of the track in microseconds. - pub fn length(&self) -> Option { + pub fn length(&self) -> Option { self.inner .get("mpris:length") .cloned() @@ -209,7 +209,7 @@ impl Metadata { MetadataValue::Str(s) => s.parse().ok(), _ => None, }) - .map(Duration::microseconds) + .map(SignedDuration::from_micros) } /// `mpris:artUrl`: The location of an image representing the track or album. @@ -309,17 +309,13 @@ impl MetadataValue { /// Tries to extract a date/time from the variant, /// returning an error if the variant is not a date/time. - pub fn try_into_date(self) -> Result { + pub fn try_into_date(self) -> Result { let variant = self.variant(); match self { - MetadataValue::Str(s) => { - OffsetDateTime::parse(&s, &time::format_description::well_known::Rfc3339).map_err( - |_| Error::IncorrectVariant { - wanted: "String (DateTime)", - actual: variant, - }, - ) - } + MetadataValue::Str(s) => s.parse::().map_err(|_| Error::IncorrectVariant { + wanted: "String (DateTime)", + actual: variant, + }), _ => Err(Error::IncorrectVariant { wanted: "String (DateTime)", actual: variant, @@ -329,7 +325,7 @@ impl MetadataValue { /// Tries to extract a date/time from the variant, /// panicking if the variant is not a date/time. - pub fn into_date(self) -> OffsetDateTime { + pub fn into_date(self) -> Timestamp { self.try_into_date().unwrap_or_else(|err| panic!("{}", err)) } diff --git a/mpris2/src/player.rs b/mpris2/src/player.rs index eff6ab1..f8e5755 100644 --- a/mpris2/src/player.rs +++ b/mpris2/src/player.rs @@ -7,12 +7,12 @@ use crate::{ metadata::Metadata, track::TrackId, }; +use jiff::SignedDuration; use std::{ fmt::{self, Display}, ops::Deref, str::FromStr, }; -use time::Duration; use zbus::{Connection, names::OwnedBusName}; #[derive(Debug, Clone)] @@ -41,11 +41,9 @@ impl Player { } /// Seeks the specified duration. - pub async fn seek(&self, duration: Duration) -> Result { + pub async fn seek(&self, duration: SignedDuration) -> Result { if self.proxy.can_seek().await? { - self.proxy - .seek(duration.whole_microseconds() as i64) - .await?; + self.proxy.seek(duration.as_micros() as i64).await?; Ok(true) } else { Ok(false) @@ -55,9 +53,9 @@ impl Player { /// Sets the current track position. /// /// If `track` does not match the id of the currently-playing track, the call is ignored as "stale". - pub async fn set_position(&self, track: &TrackId, position: Duration) -> Result<()> { + pub async fn set_position(&self, track: &TrackId, position: SignedDuration) -> Result<()> { self.proxy - .set_position(track, position.whole_microseconds() as i64) + .set_position(track, position.as_micros() as i64) .await .map_err(Error::from) } @@ -65,8 +63,8 @@ impl Player { /// How far into the current track the player is. /// /// Not all players support this, and it will return None if this is the case. - pub async fn position(&self) -> Result> { - handle_optional(self.proxy.position().await.map(Duration::microseconds)) + pub async fn position(&self) -> Result> { + handle_optional(self.proxy.position().await.map(SignedDuration::from_micros)) } /// Gets the current playback status of the player. diff --git a/networkmanager/Cargo.toml b/networkmanager/Cargo.toml index 47a6938..8e920b3 100644 --- a/networkmanager/Cargo.toml +++ b/networkmanager/Cargo.toml @@ -8,6 +8,6 @@ license = "MPL-2.0" bitflags = "2.9" derive_builder = "0.20.2" procfs = { version = "0.18", default-features = false } -time.workspace = true +jiff.workspace = true zvariant.workspace = true zbus.workspace = true diff --git a/networkmanager/src/access_point.rs b/networkmanager/src/access_point.rs index 8fc9de3..4705ce6 100644 --- a/networkmanager/src/access_point.rs +++ b/networkmanager/src/access_point.rs @@ -8,14 +8,13 @@ use crate::{ util::clock_boottime_to_time, }; use std::ops::Deref; -use time::OffsetDateTime; use zbus::Result; #[derive(Debug)] pub struct AccessPoint<'a>(AccessPointProxy<'a>); impl<'a> AccessPoint<'a> { - pub async fn last_seen(&self) -> Result> { + pub async fn last_seen(&self) -> Result> { Ok(clock_boottime_to_time(self.0.last_seen().await?)) } diff --git a/networkmanager/src/util.rs b/networkmanager/src/util.rs index 0c60fee..230e46e 100644 --- a/networkmanager/src/util.rs +++ b/networkmanager/src/util.rs @@ -1,10 +1,10 @@ // SPDX-License-Identifier: MPL-2.0 -use time::OffsetDateTime; +use jiff::Timestamp; -pub fn clock_boottime_to_time(time: i32) -> Option { +pub fn clock_boottime_to_time(time: i32) -> Option { let boot_time = procfs::boot_time_secs() .ok() .and_then(|boot_time| i64::try_from(boot_time).ok())?; - OffsetDateTime::from_unix_timestamp(boot_time + time as i64).ok() + Timestamp::from_second(boot_time + time as i64).ok() } diff --git a/timedate/Cargo.toml b/timedate/Cargo.toml index 0f07694..f9a5e50 100644 --- a/timedate/Cargo.toml +++ b/timedate/Cargo.toml @@ -15,8 +15,7 @@ all-features = true zbus.workspace = true [dev-dependencies] -chrono = "0.4.42" -chrono-tz = "0.10.4" +jiff.workspace = true zbus.workspace = true zbus.features = ["tokio"] diff --git a/timedate/examples/timedatectl.rs b/timedate/examples/timedatectl.rs index cfec9a0..f0a709a 100644 --- a/timedate/examples/timedatectl.rs +++ b/timedate/examples/timedatectl.rs @@ -1,7 +1,7 @@ // Copyright 2023 System76 // SPDX-License-Identifier: MPL-2.0 -use chrono::TimeZone; +use jiff::{Timestamp, tz::TimeZone}; const TZ_FORMAT: &str = "%a %Y-%m-%d %H:%M:%S %Z"; const RTC_FORMAT: &str = "%a %Y-%m-%d %H:%M:%S"; @@ -23,21 +23,24 @@ pub async fn main() -> zbus::Result<()> { let time_usecs = proxy.time_usec().await?; let timezone = proxy.timezone().await?; - let tz: chrono_tz::Tz = timezone.parse().unwrap(); + let tz = TimeZone::get(&timezone).unwrap(); + let utc = TimeZone::UTC; - let datetime = tz.timestamp_millis_opt((time_usecs / 1000) as i64).unwrap(); + let datetime = Timestamp::from_microsecond(time_usecs as i64) + .unwrap() + .to_zoned(tz.clone()); - let rtc_millis = (rtc_time_usecs / 1000) as i64; + let rtc_ts = Timestamp::from_microsecond(rtc_time_usecs as i64).unwrap(); let rtc_time = (if rtc_in_local { - tz.timestamp_millis_opt(rtc_millis).unwrap() + rtc_ts.to_zoned(tz) } else { - chrono_tz::UTC.timestamp_millis_opt(rtc_millis).unwrap() + rtc_ts.to_zoned(utc.clone()) }) - .format(RTC_FORMAT); + .strftime(RTC_FORMAT); - let local = datetime.format(TZ_FORMAT); - let universal = datetime.with_timezone(&chrono_tz::UTC).format(TZ_FORMAT); - let tz_string = datetime.format("%Z, %z"); + let local = datetime.strftime(TZ_FORMAT); + let universal = datetime.with_time_zone(utc).strftime(TZ_FORMAT); + let tz_string = datetime.strftime("%Z, %z"); let rtc_in_local = CHOICES[usize::from(rtc_in_local)]; let synchronized = CHOICES[usize::from(proxy.ntp_synchronized().await.unwrap_or_default())]; From 507e342c21d3ce6ae41b1d4f3fa2f0ad5ee23e75 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Vuka=C5=A1in=20Vojinovi=C4=87?= <150025636+git-f0x@users.noreply.github.com> Date: Fri, 13 Mar 2026 14:20:08 +0100 Subject: [PATCH 10/10] chore: update dependencies --- Cargo.toml | 10 +++++----- bluez/Cargo.toml | 2 +- networkmanager/Cargo.toml | 2 +- timedate/Cargo.toml | 2 +- upower/Cargo.toml | 2 +- 5 files changed, 9 insertions(+), 9 deletions(-) diff --git a/Cargo.toml b/Cargo.toml index 7c6bcd2..fa9ad76 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -19,11 +19,11 @@ members = [ ] [workspace.dependencies] -futures-channel = "0.3.31" -futures-util = "0.3.31" +futures-channel = "0.3.32" +futures-util = "0.3.32" serde = { version = "1.0", features = ["derive"] } thiserror = "2.0" jiff = "0.2" -tracing = "0.1.41" -zbus = { version = "5.11.0" } -zvariant = { version = "5.7.0" } +tracing = "0.1.44" +zbus = { version = "5.14.0" } +zvariant = { version = "5.10.0" } diff --git a/bluez/Cargo.toml b/bluez/Cargo.toml index eb497aa..a1251b8 100644 --- a/bluez/Cargo.toml +++ b/bluez/Cargo.toml @@ -19,4 +19,4 @@ color-eyre = "0.6.5" eyre = "0.6.12" pico-args = "0.5.0" tokio = { version = "1", features = ["full"] } -tracing-subscriber = "0.3.20" +tracing-subscriber = "0.3.23" diff --git a/networkmanager/Cargo.toml b/networkmanager/Cargo.toml index 8e920b3..d7db4d6 100644 --- a/networkmanager/Cargo.toml +++ b/networkmanager/Cargo.toml @@ -5,7 +5,7 @@ edition = "2024" license = "MPL-2.0" [dependencies] -bitflags = "2.9" +bitflags = "2.11" derive_builder = "0.20.2" procfs = { version = "0.18", default-features = false } jiff.workspace = true diff --git a/timedate/Cargo.toml b/timedate/Cargo.toml index f9a5e50..ace5289 100644 --- a/timedate/Cargo.toml +++ b/timedate/Cargo.toml @@ -20,5 +20,5 @@ zbus.workspace = true zbus.features = ["tokio"] [dev-dependencies.tokio] -version = "1.47.1" +version = "1.50.0" features = ["full"] diff --git a/upower/Cargo.toml b/upower/Cargo.toml index 62cb211..dcce64e 100644 --- a/upower/Cargo.toml +++ b/upower/Cargo.toml @@ -16,4 +16,4 @@ serde_repr = "0.1.20" zbus.workspace = true [dev-dependencies] -futures = "0.3.31" +futures = "0.3.32"