public inbox for pbs-devel@lists.proxmox.com
 help / color / mirror / Atom feed
* [pbs-devel] [PATCH proxmox 1/9] mark extern C blocks as unsafe
@ 2025-03-04 14:40 Maximiliano Sandoval
  2025-03-04 14:40 ` [pbs-devel] [PATCH proxmox 2/9] daemon: set_var is now unsafe Maximiliano Sandoval
                   ` (7 more replies)
  0 siblings, 8 replies; 9+ messages in thread
From: Maximiliano Sandoval @ 2025-03-04 14:40 UTC (permalink / raw)
  To: pbs-devel

This is required in edition 2024.

Signed-off-by: Maximiliano Sandoval <m.sandoval@proxmox.com>
---

The changes up to 'port to edition 2024' could be added as of now, the rest
require changes in debcargo.

 proxmox-acme-api/src/certificate_helpers.rs | 2 +-
 proxmox-async/src/runtime.rs                | 2 +-
 proxmox-rest-server/src/rest.rs             | 2 +-
 proxmox-sys/src/crypt.rs                    | 4 ++--
 proxmox-sys/src/fs/acl.rs                   | 2 +-
 proxmox-sys/src/linux/procfs/mod.rs         | 2 +-
 proxmox-sys/src/linux/timer.rs              | 4 ++--
 proxmox-systemd/src/sys.rs                  | 2 +-
 proxmox-time/src/posix.rs                   | 2 +-
 proxmox-uuid/src/lib_uuid_bindings.rs       | 2 +-
 10 files changed, 12 insertions(+), 12 deletions(-)

diff --git a/proxmox-acme-api/src/certificate_helpers.rs b/proxmox-acme-api/src/certificate_helpers.rs
index d8eee604..a0d744c8 100644
--- a/proxmox-acme-api/src/certificate_helpers.rs
+++ b/proxmox-acme-api/src/certificate_helpers.rs
@@ -385,7 +385,7 @@ fn x509name_to_string(name: &openssl::x509::X509NameRef) -> Result<String, Error
 #[allow(non_camel_case_types)]
 type ASN1_TIME = <openssl::asn1::Asn1TimeRef as ForeignTypeRef>::CType;
 
-extern "C" {
+unsafe extern "C" {
     fn ASN1_TIME_to_tm(s: *const ASN1_TIME, tm: *mut libc::tm) -> libc::c_int;
 }
 
diff --git a/proxmox-async/src/runtime.rs b/proxmox-async/src/runtime.rs
index 0721fd9e..c36dea88 100644
--- a/proxmox-async/src/runtime.rs
+++ b/proxmox-async/src/runtime.rs
@@ -45,7 +45,7 @@ use tokio::runtime::{self, Runtime, RuntimeFlavor};
 static RUNTIME: LazyLock<Mutex<Weak<Runtime>>> = LazyLock::new(|| Mutex::new(Weak::new()));
 
 #[link(name = "crypto")]
-extern "C" {
+unsafe extern "C" {
     fn OPENSSL_thread_stop();
 }
 
diff --git a/proxmox-rest-server/src/rest.rs b/proxmox-rest-server/src/rest.rs
index d23ed776..c11a9b0c 100644
--- a/proxmox-rest-server/src/rest.rs
+++ b/proxmox-rest-server/src/rest.rs
@@ -36,7 +36,7 @@ use crate::{
     formatter::*, normalize_path, ApiConfig, AuthError, CompressionMethod, RestEnvironment,
 };
 
-extern "C" {
+unsafe extern "C" {
     fn tzset();
 }
 
diff --git a/proxmox-sys/src/crypt.rs b/proxmox-sys/src/crypt.rs
index b802040b..508b9c15 100644
--- a/proxmox-sys/src/crypt.rs
+++ b/proxmox-sys/src/crypt.rs
@@ -38,7 +38,7 @@ struct CryptData {
 /// Encrypt a password - see man crypt(3)
 pub fn crypt(password: &[u8], salt: &[u8]) -> Result<String, Error> {
     #[link(name = "crypt")]
-    extern "C" {
+    unsafe extern "C" {
         #[link_name = "crypt_r"]
         fn __crypt_r(
             key: *const libc::c_char,
@@ -87,7 +87,7 @@ pub fn crypt(password: &[u8], salt: &[u8]) -> Result<String, Error> {
 /// - `rbytes`: The byte slice that contains cryptographically random bytes for generating the salt
 pub fn crypt_gensalt(prefix: &str, count: u64, rbytes: &[u8]) -> Result<String, Error> {
     #[link(name = "crypt")]
-    extern "C" {
+    unsafe extern "C" {
         #[link_name = "crypt_gensalt_rn"]
         fn __crypt_gensalt_rn(
             prefix: *const libc::c_char,
diff --git a/proxmox-sys/src/fs/acl.rs b/proxmox-sys/src/fs/acl.rs
index 5ae69296..29aa75ab 100644
--- a/proxmox-sys/src/fs/acl.rs
+++ b/proxmox-sys/src/fs/acl.rs
@@ -54,7 +54,7 @@ mod constants {
 pub use constants::*;
 
 #[link(name = "acl")]
-extern "C" {
+unsafe extern "C" {
     fn acl_get_file(path: *const c_char, acl_type: ACLType) -> *mut c_void;
     fn acl_set_file(path: *const c_char, acl_type: ACLType, acl: *mut c_void) -> c_int;
     fn acl_get_fd(fd: RawFd) -> *mut c_void;
diff --git a/proxmox-sys/src/linux/procfs/mod.rs b/proxmox-sys/src/linux/procfs/mod.rs
index 0875fcf8..3b25ce70 100644
--- a/proxmox-sys/src/linux/procfs/mod.rs
+++ b/proxmox-sys/src/linux/procfs/mod.rs
@@ -20,7 +20,7 @@ pub use mountinfo::MountInfo;
 
 /// POSIX sysconf call
 pub fn sysconf(name: i32) -> i64 {
-    extern "C" {
+    unsafe extern "C" {
         fn sysconf(name: i32) -> i64;
     }
     unsafe { sysconf(name) }
diff --git a/proxmox-sys/src/linux/timer.rs b/proxmox-sys/src/linux/timer.rs
index 462af976..bb01dc81 100644
--- a/proxmox-sys/src/linux/timer.rs
+++ b/proxmox-sys/src/linux/timer.rs
@@ -70,7 +70,7 @@ type TimerT = *mut InternalTimerT;
 
 // These wrappers are defined in -lrt.
 #[link(name = "rt")]
-extern "C" {
+unsafe extern "C" {
     fn timer_create(clockid: clockid_t, evp: *mut libc::sigevent, timer: *mut TimerT) -> c_int;
     fn timer_delete(timer: TimerT) -> c_int;
     fn timer_settime(
@@ -232,7 +232,7 @@ pub const SIGTIMEOUT: Signal = Signal(32 + 4);
 
 // Our timeout handler does exactly nothing. We only need it to interrupt
 // system calls.
-extern "C" fn sig_timeout_handler(_: c_int) {}
+unsafe extern "C" fn sig_timeout_handler(_: c_int) {}
 
 // See setup_timeout_handler().
 fn do_setup_timeout_handler() -> io::Result<()> {
diff --git a/proxmox-systemd/src/sys.rs b/proxmox-systemd/src/sys.rs
index 64075929..eabd44d1 100644
--- a/proxmox-systemd/src/sys.rs
+++ b/proxmox-systemd/src/sys.rs
@@ -5,7 +5,7 @@ use std::os::fd::RawFd;
 pub const LISTEN_FDS_START: RawFd = 3;
 
 #[link(name = "systemd")]
-extern "C" {
+unsafe extern "C" {
     pub fn sd_journal_stream_fd(
         identifier: *const c_uchar,
         priority: c_int,
diff --git a/proxmox-time/src/posix.rs b/proxmox-time/src/posix.rs
index bb60ba04..c8064bf4 100644
--- a/proxmox-time/src/posix.rs
+++ b/proxmox-time/src/posix.rs
@@ -142,7 +142,7 @@ pub fn strftime(format: &str, t: &libc::tm) -> Result<String, Error> {
 
 //  The `libc` crate does not yet contain bindings for `strftime_l`
 #[link(name = "c")]
-extern "C" {
+unsafe extern "C" {
     #[link_name = "strftime_l"]
     fn libc_strftime_l(
         s: *mut libc::c_char,
diff --git a/proxmox-uuid/src/lib_uuid_bindings.rs b/proxmox-uuid/src/lib_uuid_bindings.rs
index 0ecd994d..e39847e4 100644
--- a/proxmox-uuid/src/lib_uuid_bindings.rs
+++ b/proxmox-uuid/src/lib_uuid_bindings.rs
@@ -3,7 +3,7 @@ use std::fmt;
 use crate::Uuid;
 
 #[link(name = "uuid")]
-extern "C" {
+unsafe extern "C" {
     pub fn uuid_generate(out: *mut [u8; 16]);
     fn uuid_unparse_lower(input: *const [u8; 16], out: *mut u8);
     fn uuid_unparse_upper(input: *const [u8; 16], out: *mut u8);
-- 
2.39.5



_______________________________________________
pbs-devel mailing list
pbs-devel@lists.proxmox.com
https://lists.proxmox.com/cgi-bin/mailman/listinfo/pbs-devel


^ permalink raw reply	[flat|nested] 9+ messages in thread

* [pbs-devel] [PATCH proxmox 2/9] daemon: set_var is now unsafe
  2025-03-04 14:40 [pbs-devel] [PATCH proxmox 1/9] mark extern C blocks as unsafe Maximiliano Sandoval
@ 2025-03-04 14:40 ` Maximiliano Sandoval
  2025-03-04 14:40 ` [pbs-devel] [PATCH proxmox 3/9] mark blocks inside unsafe fns unsafe Maximiliano Sandoval
                   ` (6 subsequent siblings)
  7 siblings, 0 replies; 9+ messages in thread
From: Maximiliano Sandoval @ 2025-03-04 14:40 UTC (permalink / raw)
  To: pbs-devel

In edition 2024 set_var is unsafe.

Signed-off-by: Maximiliano Sandoval <m.sandoval@proxmox.com>
---
 proxmox-daemon/src/server.rs | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/proxmox-daemon/src/server.rs b/proxmox-daemon/src/server.rs
index 7cf5ea06..670e3c3b 100644
--- a/proxmox-daemon/src/server.rs
+++ b/proxmox-daemon/src/server.rs
@@ -79,7 +79,7 @@ impl Reloader {
 
     fn pre_exec(self) -> Result<(), Error> {
         for item in self.pre_exec {
-            std::env::set_var(item.name, (item.store_fn)()?);
+            unsafe { std::env::set_var(item.name, (item.store_fn)()?) };
         }
         Ok(())
     }
-- 
2.39.5



_______________________________________________
pbs-devel mailing list
pbs-devel@lists.proxmox.com
https://lists.proxmox.com/cgi-bin/mailman/listinfo/pbs-devel


^ permalink raw reply	[flat|nested] 9+ messages in thread

* [pbs-devel] [PATCH proxmox 3/9] mark blocks inside unsafe fns unsafe
  2025-03-04 14:40 [pbs-devel] [PATCH proxmox 1/9] mark extern C blocks as unsafe Maximiliano Sandoval
  2025-03-04 14:40 ` [pbs-devel] [PATCH proxmox 2/9] daemon: set_var is now unsafe Maximiliano Sandoval
@ 2025-03-04 14:40 ` Maximiliano Sandoval
  2025-03-04 14:40 ` [pbs-devel] [PATCH proxmox 4/9] broadcast_future: accommodate to edition 2024 changes to RPIT Maximiliano Sandoval
                   ` (5 subsequent siblings)
  7 siblings, 0 replies; 9+ messages in thread
From: Maximiliano Sandoval @ 2025-03-04 14:40 UTC (permalink / raw)
  To: pbs-devel

In edition 2024 unsafe code inside unsafe functions has to be explicitly
marked as such.

Signed-off-by: Maximiliano Sandoval <m.sandoval@proxmox.com>
---
 proxmox-shared-memory/src/lib.rs              |  4 +-
 proxmox-shared-memory/src/raw_shared_mutex.rs | 48 ++++++++++---------
 proxmox-sys/src/fs/read_dir.rs                |  2 +-
 proxmox-sys/src/linux/pid.rs                  |  4 +-
 proxmox-sys/src/mmap.rs                       | 18 +++----
 5 files changed, 40 insertions(+), 36 deletions(-)

diff --git a/proxmox-shared-memory/src/lib.rs b/proxmox-shared-memory/src/lib.rs
index defe678d..4a986b09 100644
--- a/proxmox-shared-memory/src/lib.rs
+++ b/proxmox-shared-memory/src/lib.rs
@@ -201,7 +201,7 @@ impl<T: Sized + Init> SharedMemory<T> {
 /// This calls `Init::initialize`, it is up to the user to ensure this is safe. The value should
 /// not have been initialized at this point.
 pub unsafe fn initialize_subtype<T: Init>(this: &mut T) {
-    let data: &mut MaybeUninit<T> = std::mem::transmute(this);
+    let data: &mut MaybeUninit<T> = unsafe { std::mem::transmute(this) };
     Init::initialize(data);
 }
 
@@ -211,6 +211,6 @@ pub unsafe fn initialize_subtype<T: Init>(this: &mut T) {
 ///
 /// This calls `Init::check_type_magic`, it is up to the user to ensure this is safe.
 pub unsafe fn check_subtype<T: Init>(this: &T) -> Result<(), Error> {
-    let data: &MaybeUninit<T> = std::mem::transmute(this);
+    let data: &MaybeUninit<T> = unsafe { std::mem::transmute(this) };
     Init::check_type_magic(data)
 }
diff --git a/proxmox-shared-memory/src/raw_shared_mutex.rs b/proxmox-shared-memory/src/raw_shared_mutex.rs
index 1b06d5b8..3056299d 100644
--- a/proxmox-shared-memory/src/raw_shared_mutex.rs
+++ b/proxmox-shared-memory/src/raw_shared_mutex.rs
@@ -19,31 +19,33 @@ impl RawSharedMutex {
     #[inline]
     pub unsafe fn init(&mut self) {
         let mut attr = MaybeUninit::<libc::pthread_mutexattr_t>::uninit();
-        cvt_nz(libc::pthread_mutexattr_init(attr.as_mut_ptr())).unwrap();
-        let attr = PthreadMutexAttr(&mut attr);
-        cvt_nz(libc::pthread_mutexattr_settype(
-            attr.0.as_mut_ptr(),
-            libc::PTHREAD_MUTEX_NORMAL,
-        ))
-        .unwrap();
-        cvt_nz(libc::pthread_mutexattr_setpshared(
-            attr.0.as_mut_ptr(),
-            libc::PTHREAD_PROCESS_SHARED,
-        ))
-        .unwrap();
-        cvt_nz(libc::pthread_mutexattr_setrobust(
-            attr.0.as_mut_ptr(),
-            libc::PTHREAD_MUTEX_ROBUST,
-        ))
-        .unwrap();
-        cvt_nz(libc::pthread_mutex_init(self.inner.get(), attr.0.as_ptr())).unwrap();
+        unsafe {
+            cvt_nz(libc::pthread_mutexattr_init(attr.as_mut_ptr())).unwrap();
+            let attr = PthreadMutexAttr(&mut attr);
+            cvt_nz(libc::pthread_mutexattr_settype(
+                attr.0.as_mut_ptr(),
+                libc::PTHREAD_MUTEX_NORMAL,
+            ))
+            .unwrap();
+            cvt_nz(libc::pthread_mutexattr_setpshared(
+                attr.0.as_mut_ptr(),
+                libc::PTHREAD_PROCESS_SHARED,
+            ))
+            .unwrap();
+            cvt_nz(libc::pthread_mutexattr_setrobust(
+                attr.0.as_mut_ptr(),
+                libc::PTHREAD_MUTEX_ROBUST,
+            ))
+            .unwrap();
+            cvt_nz(libc::pthread_mutex_init(self.inner.get(), attr.0.as_ptr())).unwrap();
+        }
     }
 
     #[inline]
     pub unsafe fn lock(&self) {
-        let mut r = libc::pthread_mutex_lock(self.inner.get());
+        let mut r = unsafe { libc::pthread_mutex_lock(self.inner.get()) };
         if r == libc::EOWNERDEAD {
-            r = libc::pthread_mutex_consistent(self.inner.get());
+            r = unsafe { libc::pthread_mutex_consistent(self.inner.get()) };
         }
 
         debug_assert_eq!(r, 0);
@@ -51,15 +53,15 @@ impl RawSharedMutex {
 
     #[inline]
     pub unsafe fn unlock(&self) {
-        let r = libc::pthread_mutex_unlock(self.inner.get());
+        let r = unsafe { libc::pthread_mutex_unlock(self.inner.get()) };
         debug_assert_eq!(r, 0);
     }
 
     #[inline]
     pub unsafe fn try_lock(&self) -> bool {
-        let mut r = libc::pthread_mutex_trylock(self.inner.get());
+        let mut r = unsafe { libc::pthread_mutex_trylock(self.inner.get()) };
         if r == libc::EOWNERDEAD {
-            r = libc::pthread_mutex_consistent(self.inner.get());
+            r = unsafe { libc::pthread_mutex_consistent(self.inner.get()) };
         }
 
         r == 0
diff --git a/proxmox-sys/src/fs/read_dir.rs b/proxmox-sys/src/fs/read_dir.rs
index 3119274b..09dbac3d 100644
--- a/proxmox-sys/src/fs/read_dir.rs
+++ b/proxmox-sys/src/fs/read_dir.rs
@@ -79,7 +79,7 @@ impl ReadDirEntry {
     /// It is up to the user to ensure that the file name is valid utf-8 *before* calling this
     /// method.
     pub unsafe fn file_name_utf8_unchecked(&self) -> &str {
-        std::str::from_utf8_unchecked(self.file_name().to_bytes())
+        unsafe { std::str::from_utf8_unchecked(self.file_name().to_bytes()) }
     }
 }
 
diff --git a/proxmox-sys/src/linux/pid.rs b/proxmox-sys/src/linux/pid.rs
index 7d50ac44..03464551 100644
--- a/proxmox-sys/src/linux/pid.rs
+++ b/proxmox-sys/src/linux/pid.rs
@@ -24,7 +24,7 @@ pub const SYS_pidfd_open: libc::c_long = 434;
 pub const SYS_pidfd_send_signal: libc::c_long = 424;
 
 unsafe fn pidfd_open(pid: libc::pid_t, flags: libc::c_uint) -> libc::c_long {
-    libc::syscall(SYS_pidfd_open, pid, flags)
+    unsafe { libc::syscall(SYS_pidfd_open, pid, flags) }
 }
 
 unsafe fn pidfd_send_signal(
@@ -33,7 +33,7 @@ unsafe fn pidfd_send_signal(
     info: *mut libc::siginfo_t,
     flags: libc::c_uint,
 ) -> libc::c_long {
-    libc::syscall(SYS_pidfd_send_signal, pidfd, sig, info, flags)
+    unsafe { libc::syscall(SYS_pidfd_send_signal, pidfd, sig, info, flags) }
 }
 
 /// File descriptor reference to a process.
diff --git a/proxmox-sys/src/mmap.rs b/proxmox-sys/src/mmap.rs
index 0ba5337b..6110d676 100644
--- a/proxmox-sys/src/mmap.rs
+++ b/proxmox-sys/src/mmap.rs
@@ -38,14 +38,16 @@ impl<T> Mmap<T> {
 
         // libc::size_t vs usize
         #[allow(clippy::useless_conversion)]
-        let data = mman::mmap(
-            None,
-            byte_len,
-            prot,
-            flags,
-            fd,
-            libc::off_t::try_from(ofs).map_err(io::Error::other)?,
-        )
+        let data = unsafe {
+            mman::mmap(
+                None,
+                byte_len,
+                prot,
+                flags,
+                fd,
+                libc::off_t::try_from(ofs).map_err(io::Error::other)?,
+            )
+        }
         .map_err(SysError::into_io_error)?;
 
         Ok(Self {
-- 
2.39.5



_______________________________________________
pbs-devel mailing list
pbs-devel@lists.proxmox.com
https://lists.proxmox.com/cgi-bin/mailman/listinfo/pbs-devel


^ permalink raw reply	[flat|nested] 9+ messages in thread

* [pbs-devel] [PATCH proxmox 4/9] broadcast_future: accommodate to edition 2024 changes to RPIT
  2025-03-04 14:40 [pbs-devel] [PATCH proxmox 1/9] mark extern C blocks as unsafe Maximiliano Sandoval
  2025-03-04 14:40 ` [pbs-devel] [PATCH proxmox 2/9] daemon: set_var is now unsafe Maximiliano Sandoval
  2025-03-04 14:40 ` [pbs-devel] [PATCH proxmox 3/9] mark blocks inside unsafe fns unsafe Maximiliano Sandoval
@ 2025-03-04 14:40 ` Maximiliano Sandoval
  2025-03-04 14:40 ` [pbs-devel] [PATCH proxmox 5/9] procfs: add variable bindings for std::fs::read Maximiliano Sandoval
                   ` (4 subsequent siblings)
  7 siblings, 0 replies; 9+ messages in thread
From: Maximiliano Sandoval @ 2025-03-04 14:40 UTC (permalink / raw)
  To: pbs-devel

Prevents the following error:

```
error[E0597]: `inner` does not live long enough
   --> proxmox-async/src/broadcast_future.rs:109:24
    |
107 |         inner: Arc<Mutex<BroadCastFutureBinding<T>>>,
    |         ----- binding `inner` declared here
108 |     ) -> impl Future<Output = Result<T, Error>> {
109 |         let mut data = inner.lock().unwrap();
    |                        ^^^^^ borrowed value does not live long enough
...
121 |         data.broadcast.listen()
    |         ----------------------- argument requires that `inner` is borrowed for `'static`
122 |     }
    |     - `inner` dropped here while still borrowed

error[E0597]: `data` does not live long enough
   --> proxmox-async/src/broadcast_future.rs:121:9
    |
109 |         let mut data = inner.lock().unwrap();
    |             -------- binding `data` declared here
...
121 |         data.broadcast.listen()
    |         ^^^^-------------------
    |         |
    |         borrowed value does not live long enough
    |         argument requires that `data` is borrowed for `'static`
122 |     }
    |     - `data` dropped here while still borrowed
```

The use<...> pattern was introduced in rust 1.82.

Signed-off-by: Maximiliano Sandoval <m.sandoval@proxmox.com>
---
 Cargo.toml                            | 2 +-
 proxmox-async/src/broadcast_future.rs | 6 +++---
 2 files changed, 4 insertions(+), 4 deletions(-)

diff --git a/Cargo.toml b/Cargo.toml
index 4d3f633e..3d758e92 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -62,7 +62,7 @@ license = "AGPL-3"
 repository = "https://git.proxmox.com/?p=proxmox.git"
 homepage = "https://proxmox.com"
 exclude = [ "debian" ]
-rust-version = "1.80"
+rust-version = "1.82"
 
 [workspace.dependencies]
 # any features enabled here are enabled on all members using 'workspace = true'!
diff --git a/proxmox-async/src/broadcast_future.rs b/proxmox-async/src/broadcast_future.rs
index 838204d3..62982e13 100644
--- a/proxmox-async/src/broadcast_future.rs
+++ b/proxmox-async/src/broadcast_future.rs
@@ -43,7 +43,7 @@ impl<T: Clone> BroadcastData<T> {
         }
     }
 
-    pub fn listen(&mut self) -> impl Future<Output = Result<T, Error>> {
+    pub fn listen(&mut self) -> impl Future<Output = Result<T, Error>> + use<T> {
         use futures::future::{ok, Either};
 
         match &self.result {
@@ -105,7 +105,7 @@ impl<T: Clone + Send + 'static> BroadcastFuture<T> {
 
     fn spawn(
         inner: Arc<Mutex<BroadCastFutureBinding<T>>>,
-    ) -> impl Future<Output = Result<T, Error>> {
+    ) -> impl Future<Output = Result<T, Error>> + use<T> {
         let mut data = inner.lock().unwrap();
 
         if let Some(source) = data.future.take() {
@@ -122,7 +122,7 @@ impl<T: Clone + Send + 'static> BroadcastFuture<T> {
     }
 
     /// Register a listener
-    pub fn listen(&self) -> impl Future<Output = Result<T, Error>> {
+    pub fn listen(&self) -> impl Future<Output = Result<T, Error>> + use<T> {
         let inner2 = self.inner.clone();
         async move { Self::spawn(inner2).await }
     }
-- 
2.39.5



_______________________________________________
pbs-devel mailing list
pbs-devel@lists.proxmox.com
https://lists.proxmox.com/cgi-bin/mailman/listinfo/pbs-devel


^ permalink raw reply	[flat|nested] 9+ messages in thread

* [pbs-devel] [PATCH proxmox 5/9] procfs: add variable bindings for std::fs::read
  2025-03-04 14:40 [pbs-devel] [PATCH proxmox 1/9] mark extern C blocks as unsafe Maximiliano Sandoval
                   ` (2 preceding siblings ...)
  2025-03-04 14:40 ` [pbs-devel] [PATCH proxmox 4/9] broadcast_future: accommodate to edition 2024 changes to RPIT Maximiliano Sandoval
@ 2025-03-04 14:40 ` Maximiliano Sandoval
  2025-03-04 14:40 ` [pbs-devel] [PATCH proxmox 6/9] port to edition 2024 Maximiliano Sandoval
                   ` (3 subsequent siblings)
  7 siblings, 0 replies; 9+ messages in thread
From: Maximiliano Sandoval @ 2025-03-04 14:40 UTC (permalink / raw)
  To: pbs-devel

These will produce an error in edition 2024 otherwise. The reason this
is needed is because the `unsafe` block has its own scope.

The bytes were defined inside of the let-mut block to preserve the
lifetime they had before this commit.

Signed-off-by: Maximiliano Sandoval <m.sandoval@proxmox.com>
---
 proxmox-sys/src/linux/procfs/mod.rs | 10 ++++++----
 1 file changed, 6 insertions(+), 4 deletions(-)

diff --git a/proxmox-sys/src/linux/procfs/mod.rs b/proxmox-sys/src/linux/procfs/mod.rs
index 3b25ce70..a1758bc0 100644
--- a/proxmox-sys/src/linux/procfs/mod.rs
+++ b/proxmox-sys/src/linux/procfs/mod.rs
@@ -228,9 +228,10 @@ static PROC_LAST_STAT: LazyLock<RwLock<(ProcFsStat, Instant, bool)>> =
 pub fn read_proc_stat() -> Result<ProcFsStat, Error> {
     let sample_time = Instant::now();
     let update_duration;
-    let mut stat =
-        parse_proc_stat(unsafe { std::str::from_utf8_unchecked(&std::fs::read("/proc/stat")?) })
-            .unwrap();
+    let mut stat = {
+        let bytes = std::fs::read("/proc/stat")?;
+        parse_proc_stat(unsafe { std::str::from_utf8_unchecked(&bytes) }).unwrap()
+    };
 
     {
         // read lock scope
@@ -755,7 +756,8 @@ pub struct Loadavg(pub f64, pub f64, pub f64);
 impl Loadavg {
     /// Read the load avage from `/proc/loadavg`.
     pub fn read() -> Result<Self, Error> {
-        Self::parse(unsafe { std::str::from_utf8_unchecked(&std::fs::read("/proc/loadavg")?) })
+        let bytes = std::fs::read("/proc/loadavg")?;
+        Self::parse(unsafe { std::str::from_utf8_unchecked(&bytes) })
     }
 
     /// Parse the value triplet.
-- 
2.39.5



_______________________________________________
pbs-devel mailing list
pbs-devel@lists.proxmox.com
https://lists.proxmox.com/cgi-bin/mailman/listinfo/pbs-devel


^ permalink raw reply	[flat|nested] 9+ messages in thread

* [pbs-devel] [PATCH proxmox 6/9] port to edition 2024
  2025-03-04 14:40 [pbs-devel] [PATCH proxmox 1/9] mark extern C blocks as unsafe Maximiliano Sandoval
                   ` (3 preceding siblings ...)
  2025-03-04 14:40 ` [pbs-devel] [PATCH proxmox 5/9] procfs: add variable bindings for std::fs::read Maximiliano Sandoval
@ 2025-03-04 14:40 ` Maximiliano Sandoval
  2025-03-04 14:40 ` [pbs-devel] [PATCH proxmox 7/9] run rustfmt with " Maximiliano Sandoval
                   ` (2 subsequent siblings)
  7 siblings, 0 replies; 9+ messages in thread
From: Maximiliano Sandoval @ 2025-03-04 14:40 UTC (permalink / raw)
  To: pbs-devel

We remove binding modifiers as per:

error: binding modifiers may only be written when the default binding mode is `move`
   --> proxmox-schema/src/format.rs:247:24
    |
247 |         Schema::Number(ref schema) => (
    |                        ^^^ binding modifier not allowed under `ref` default binding mode
    |
    = note: for more information, see <https://doc.rust-lang.org/nightly/edition-guide/rust-2024/match-ergonomics.html>
note: matching on a reference type with a non-reference pattern changes the default binding mode

These change are possible thanks to the new match ergonomics so they
cannot be split into a separate commit.

Signed-off-by: Maximiliano Sandoval <m.sandoval@proxmox.com>
---
 Cargo.toml                                   |  4 +--
 proxmox-acme-api/src/plugin_api_impl.rs      |  4 +--
 proxmox-api-macro/src/api/method.rs          |  8 +++---
 proxmox-api-macro/src/api/structs.rs         |  2 +-
 proxmox-async/src/io/async_channel_writer.rs |  2 +-
 proxmox-http/src/client/tls.rs               | 30 ++++++++++----------
 proxmox-http/src/rate_limited_stream.rs      |  2 +-
 proxmox-http/src/websocket/mod.rs            |  2 +-
 proxmox-notify/src/endpoints/smtp.rs         |  2 +-
 proxmox-router/src/cli/command.rs            |  8 +++---
 proxmox-router/src/permission.rs             |  4 +--
 proxmox-router/src/stream/parsing.rs         |  5 +---
 proxmox-schema/src/format.rs                 | 16 +++++------
 proxmox-schema/src/schema.rs                 |  6 ++--
 rustfmt.toml                                 |  2 +-
 15 files changed, 47 insertions(+), 50 deletions(-)

diff --git a/Cargo.toml b/Cargo.toml
index 3d758e92..794b448b 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -57,12 +57,12 @@ resolver = "2"
 
 [workspace.package]
 authors = ["Proxmox Support Team <support@proxmox.com>"]
-edition = "2021"
+edition = "2024"
 license = "AGPL-3"
 repository = "https://git.proxmox.com/?p=proxmox.git"
 homepage = "https://proxmox.com"
 exclude = [ "debian" ]
-rust-version = "1.82"
+rust-version = "1.85"
 
 [workspace.dependencies]
 # any features enabled here are enabled on all members using 'workspace = true'!
diff --git a/proxmox-acme-api/src/plugin_api_impl.rs b/proxmox-acme-api/src/plugin_api_impl.rs
index 9aa8a4c3..6c2403e4 100644
--- a/proxmox-acme-api/src/plugin_api_impl.rs
+++ b/proxmox-acme-api/src/plugin_api_impl.rs
@@ -83,7 +83,7 @@ pub fn update_plugin(
     expected_digest.detect_modification(digest.as_ref())?;
 
     match plugins.get_mut(&id) {
-        Some((ty, ref mut entry)) => {
+        Some((ty, entry)) => {
             if ty != "dns" {
                 bail!("cannot update plugin of type {:?}", ty);
             }
@@ -150,7 +150,7 @@ fn modify_cfg_for_api(id: &str, ty: &str, data: &Value) -> PluginConfig {
     // None of these should be able to fail unless the user changed the files by hand, in which
     // case we leave the unmodified string in the Value for now. This will be handled with an error
     // later.
-    if let Some(Value::String(ref mut data)) = obj.get_mut("data") {
+    if let Some(Value::String(data)) = obj.get_mut("data") {
         if let Ok(new) = base64::decode_config(&data, base64::URL_SAFE_NO_PAD) {
             if let Ok(utf8) = String::from_utf8(new) {
                 *data = utf8;
diff --git a/proxmox-api-macro/src/api/method.rs b/proxmox-api-macro/src/api/method.rs
index bc2c2e4f..cca07145 100644
--- a/proxmox-api-macro/src/api/method.rs
+++ b/proxmox-api-macro/src/api/method.rs
@@ -30,7 +30,7 @@ pub enum ReturnType {
 impl ReturnType {
     fn as_mut_schema(&mut self) -> Option<&mut Schema> {
         match self {
-            ReturnType::Explicit(ReturnSchema { ref mut schema, .. }) => Some(schema),
+            ReturnType::Explicit(ReturnSchema { schema, .. }) => Some(schema),
             _ => None,
         }
     }
@@ -582,7 +582,7 @@ fn create_wrapper_function(
     let body = match method_info.flavor {
         MethodFlavor::Normal => {
             quote! {
-                if let ::serde_json::Value::Object(ref mut input_map) = &mut input_params {
+                if let ::serde_json::Value::Object(input_map) = &mut input_params {
                     #body
                     Ok(::serde_json::to_value(#func_name(#args) #await_keyword #question_mark)?)
                 } else {
@@ -592,7 +592,7 @@ fn create_wrapper_function(
         }
         MethodFlavor::Serializing => {
             quote! {
-                if let ::serde_json::Value::Object(ref mut input_map) = &mut input_params {
+                if let ::serde_json::Value::Object(input_map) = &mut input_params {
                     #body
                     let res = #func_name(#args) #await_keyword #question_mark;
                     let res: ::std::boxed::Box<dyn ::proxmox_router::SerializableReturn + Send> = ::std::boxed::Box::new(res);
@@ -609,7 +609,7 @@ fn create_wrapper_function(
                 quote! { ::proxmox_router::SyncStream }
             };
             quote! {
-                if let ::serde_json::Value::Object(ref mut input_map) = &mut input_params {
+                if let ::serde_json::Value::Object(input_map) = &mut input_params {
                     #body
                     let res = #func_name(#args) #await_keyword #question_mark;
                     let res = #ty::from(res);
diff --git a/proxmox-api-macro/src/api/structs.rs b/proxmox-api-macro/src/api/structs.rs
index ee537ff0..c18b20b4 100644
--- a/proxmox-api-macro/src/api/structs.rs
+++ b/proxmox-api-macro/src/api/structs.rs
@@ -164,7 +164,7 @@ fn handle_regular_struct(
     let mut all_of_schemas = TokenStream::new();
     let mut to_remove = Vec::new();
 
-    if let syn::Fields::Named(ref fields) = &stru.fields {
+    if let syn::Fields::Named(fields) = &stru.fields {
         for field in &fields.named {
             let attrs = serde::FieldAttrib::try_from(&field.attrs[..])?;
 
diff --git a/proxmox-async/src/io/async_channel_writer.rs b/proxmox-async/src/io/async_channel_writer.rs
index 9dd64cd5..d9de8e27 100644
--- a/proxmox-async/src/io/async_channel_writer.rs
+++ b/proxmox-async/src/io/async_channel_writer.rs
@@ -76,7 +76,7 @@ impl AsyncChannelWriter {
 
                     self.state = WriterState::Sending(future.boxed());
                 }
-                WriterState::Sending(ref mut future) => match ready!(future.as_mut().poll(cx)) {
+                WriterState::Sending(future) => match ready!(future.as_mut().poll(cx)) {
                     Ok(sender) => {
                         self.sender = Some(sender);
                         self.state = WriterState::Ready;
diff --git a/proxmox-http/src/client/tls.rs b/proxmox-http/src/client/tls.rs
index 81aff783..867017e8 100644
--- a/proxmox-http/src/client/tls.rs
+++ b/proxmox-http/src/client/tls.rs
@@ -24,9 +24,9 @@ impl<S: AsyncRead + AsyncWrite + Unpin> AsyncRead for MaybeTlsStream<S> {
         buf: &mut ReadBuf,
     ) -> Poll<Result<(), io::Error>> {
         match self.get_mut() {
-            MaybeTlsStream::Normal(ref mut s) => Pin::new(s).poll_read(cx, buf),
-            MaybeTlsStream::Proxied(ref mut s) => Pin::new(s).poll_read(cx, buf),
-            MaybeTlsStream::Secured(ref mut s) => Pin::new(s).poll_read(cx, buf),
+            MaybeTlsStream::Normal(s) => Pin::new(s).poll_read(cx, buf),
+            MaybeTlsStream::Proxied(s) => Pin::new(s).poll_read(cx, buf),
+            MaybeTlsStream::Secured(s) => Pin::new(s).poll_read(cx, buf),
         }
     }
 }
@@ -38,9 +38,9 @@ impl<S: AsyncRead + AsyncWrite + Unpin> AsyncWrite for MaybeTlsStream<S> {
         buf: &[u8],
     ) -> Poll<Result<usize, io::Error>> {
         match self.get_mut() {
-            MaybeTlsStream::Normal(ref mut s) => Pin::new(s).poll_write(cx, buf),
-            MaybeTlsStream::Proxied(ref mut s) => Pin::new(s).poll_write(cx, buf),
-            MaybeTlsStream::Secured(ref mut s) => Pin::new(s).poll_write(cx, buf),
+            MaybeTlsStream::Normal(s) => Pin::new(s).poll_write(cx, buf),
+            MaybeTlsStream::Proxied(s) => Pin::new(s).poll_write(cx, buf),
+            MaybeTlsStream::Secured(s) => Pin::new(s).poll_write(cx, buf),
         }
     }
 
@@ -50,9 +50,9 @@ impl<S: AsyncRead + AsyncWrite + Unpin> AsyncWrite for MaybeTlsStream<S> {
         bufs: &[io::IoSlice<'_>],
     ) -> Poll<Result<usize, io::Error>> {
         match self.get_mut() {
-            MaybeTlsStream::Normal(ref mut s) => Pin::new(s).poll_write_vectored(cx, bufs),
-            MaybeTlsStream::Proxied(ref mut s) => Pin::new(s).poll_write_vectored(cx, bufs),
-            MaybeTlsStream::Secured(ref mut s) => Pin::new(s).poll_write_vectored(cx, bufs),
+            MaybeTlsStream::Normal(s) => Pin::new(s).poll_write_vectored(cx, bufs),
+            MaybeTlsStream::Proxied(s) => Pin::new(s).poll_write_vectored(cx, bufs),
+            MaybeTlsStream::Secured(s) => Pin::new(s).poll_write_vectored(cx, bufs),
         }
     }
 
@@ -66,17 +66,17 @@ impl<S: AsyncRead + AsyncWrite + Unpin> AsyncWrite for MaybeTlsStream<S> {
 
     fn poll_flush(self: Pin<&mut Self>, cx: &mut Context) -> Poll<Result<(), io::Error>> {
         match self.get_mut() {
-            MaybeTlsStream::Normal(ref mut s) => Pin::new(s).poll_flush(cx),
-            MaybeTlsStream::Proxied(ref mut s) => Pin::new(s).poll_flush(cx),
-            MaybeTlsStream::Secured(ref mut s) => Pin::new(s).poll_flush(cx),
+            MaybeTlsStream::Normal(s) => Pin::new(s).poll_flush(cx),
+            MaybeTlsStream::Proxied(s) => Pin::new(s).poll_flush(cx),
+            MaybeTlsStream::Secured(s) => Pin::new(s).poll_flush(cx),
         }
     }
 
     fn poll_shutdown(self: Pin<&mut Self>, cx: &mut Context) -> Poll<Result<(), io::Error>> {
         match self.get_mut() {
-            MaybeTlsStream::Normal(ref mut s) => Pin::new(s).poll_shutdown(cx),
-            MaybeTlsStream::Proxied(ref mut s) => Pin::new(s).poll_shutdown(cx),
-            MaybeTlsStream::Secured(ref mut s) => Pin::new(s).poll_shutdown(cx),
+            MaybeTlsStream::Normal(s) => Pin::new(s).poll_shutdown(cx),
+            MaybeTlsStream::Proxied(s) => Pin::new(s).poll_shutdown(cx),
+            MaybeTlsStream::Secured(s) => Pin::new(s).poll_shutdown(cx),
         }
     }
 }
diff --git a/proxmox-http/src/rate_limited_stream.rs b/proxmox-http/src/rate_limited_stream.rs
index d43c09c1..0e9c43ae 100644
--- a/proxmox-http/src/rate_limited_stream.rs
+++ b/proxmox-http/src/rate_limited_stream.rs
@@ -116,7 +116,7 @@ fn register_traffic(limiter: &(dyn ShareableRateLimit), count: usize) -> Option<
 
 fn delay_is_ready(delay: &mut Option<Pin<Box<Sleep>>>, ctx: &mut Context<'_>) -> bool {
     match delay {
-        Some(ref mut future) => future.as_mut().poll(ctx).is_ready(),
+        Some(future) => future.as_mut().poll(ctx).is_ready(),
         None => true,
     }
 }
diff --git a/proxmox-http/src/websocket/mod.rs b/proxmox-http/src/websocket/mod.rs
index eef5fa8e..fdbec979 100644
--- a/proxmox-http/src/websocket/mod.rs
+++ b/proxmox-http/src/websocket/mod.rs
@@ -548,7 +548,7 @@ impl<R: AsyncRead + Unpin + Send + 'static> AsyncRead for WebSocketReader<R> {
 
                     this.state = ReaderState::Receiving(future.boxed());
                 }
-                ReaderState::Receiving(ref mut future) => match ready!(future.as_mut().poll(cx)) {
+                ReaderState::Receiving(future) => match ready!(future.as_mut().poll(cx)) {
                     Ok(ReadResult {
                         len,
                         reader,
diff --git a/proxmox-notify/src/endpoints/smtp.rs b/proxmox-notify/src/endpoints/smtp.rs
index b88e6c95..4521e04a 100644
--- a/proxmox-notify/src/endpoints/smtp.rs
+++ b/proxmox-notify/src/endpoints/smtp.rs
@@ -251,7 +251,7 @@ impl Endpoint for SmtpEndpoint {
                     .map_err(|err| Error::NotifyFailed(self.name().into(), Box::new(err)))?
             }
             #[cfg(feature = "mail-forwarder")]
-            Content::ForwardedMail { ref raw, title, .. } => {
+            Content::ForwardedMail { raw, title, .. } => {
                 use lettre::message::header::ContentTransferEncoding;
                 use lettre::message::Body;
                 use tracing::error;
diff --git a/proxmox-router/src/cli/command.rs b/proxmox-router/src/cli/command.rs
index 01f64d19..aa99d528 100644
--- a/proxmox-router/src/cli/command.rs
+++ b/proxmox-router/src/cli/command.rs
@@ -327,10 +327,10 @@ pub async fn handle_command_future(
     set_help_context(Some(def.clone()));
 
     let result = match &*def {
-        CommandLineInterface::Simple(ref cli_cmd) => {
+        CommandLineInterface::Simple(cli_cmd) => {
             handle_simple_command_future(prefix, cli_cmd, args, rpcenv).await
         }
-        CommandLineInterface::Nested(ref map) => {
+        CommandLineInterface::Nested(map) => {
             let mut prefix = prefix.to_string();
             let cli_cmd = parse_nested_command(&mut prefix, map, &mut args)?;
             handle_simple_command_future(&prefix, cli_cmd, args, rpcenv).await
@@ -356,10 +356,10 @@ pub fn handle_command(
     set_help_context(Some(def.clone()));
 
     let result = match &*def {
-        CommandLineInterface::Simple(ref cli_cmd) => {
+        CommandLineInterface::Simple(cli_cmd) => {
             handle_simple_command(prefix, cli_cmd, args, &mut rpcenv, run, [].into_iter())
         }
-        CommandLineInterface::Nested(ref map) => {
+        CommandLineInterface::Nested(map) => {
             let mut prefix = prefix.to_string();
             let cli_cmd = parse_nested_command(&mut prefix, map, &mut args)?;
             handle_simple_command(&prefix, cli_cmd, args, &mut rpcenv, run, [].into_iter())
diff --git a/proxmox-router/src/permission.rs b/proxmox-router/src/permission.rs
index d3767b51..f6388d64 100644
--- a/proxmox-router/src/permission.rs
+++ b/proxmox-router/src/permission.rs
@@ -38,9 +38,9 @@ impl fmt::Debug for Permission {
             Permission::Superuser => f.write_str("Superuser"),
             Permission::World => f.write_str("World"),
             Permission::Anybody => f.write_str("Anybody"),
-            Permission::User(ref userid) => write!(f, "User({})", userid),
+            Permission::User(userid) => write!(f, "User({})", userid),
             Permission::UserParam(param_name) => write!(f, "UserParam({})", param_name),
-            Permission::Group(ref group) => write!(f, "Group({})", group),
+            Permission::Group(group) => write!(f, "Group({})", group),
             Permission::WithParam(param_name, subtest) => {
                 write!(f, "WithParam({}, {:?})", param_name, subtest)
             }
diff --git a/proxmox-router/src/stream/parsing.rs b/proxmox-router/src/stream/parsing.rs
index 69ae1994..782c18a6 100644
--- a/proxmox-router/src/stream/parsing.rs
+++ b/proxmox-router/src/stream/parsing.rs
@@ -270,10 +270,7 @@ impl AsyncBufRead for BodyBufReader {
     ) -> Poll<io::Result<&[u8]>> {
         use hyper::body::HttpBody;
 
-        let Self {
-            ref mut reader,
-            ref mut buf_at,
-        } = Pin::into_inner(self);
+        let Self { reader, buf_at } = Pin::into_inner(self);
         loop {
             // If we currently have a buffer, use it:
             if let Some((buf, at)) = buf_at {
diff --git a/proxmox-schema/src/format.rs b/proxmox-schema/src/format.rs
index 080b0268..c1e33a68 100644
--- a/proxmox-schema/src/format.rs
+++ b/proxmox-schema/src/format.rs
@@ -229,30 +229,30 @@ pub fn get_property_description(
 
     let (descr, default, extra) = match schema {
         Schema::Null => ("null", None, None),
-        Schema::String(ref schema) => (
+        Schema::String(schema) => (
             schema.description,
             schema.default.map(|v| v.to_owned()),
             None,
         ),
-        Schema::Boolean(ref schema) => (
+        Schema::Boolean(schema) => (
             schema.description,
             schema.default.map(|v| v.to_string()),
             None,
         ),
-        Schema::Integer(ref schema) => (
+        Schema::Integer(schema) => (
             schema.description,
             schema.default.map(|v| v.to_string()),
             None,
         ),
-        Schema::Number(ref schema) => (
+        Schema::Number(schema) => (
             schema.description,
             schema.default.map(|v| v.to_string()),
             None,
         ),
-        Schema::Object(ref schema) => (schema.description, None, None),
-        Schema::AllOf(ref schema) => (schema.description, None, None),
-        Schema::OneOf(ref schema) => (schema.description, None, None),
-        Schema::Array(ref schema) => (
+        Schema::Object(schema) => (schema.description, None, None),
+        Schema::AllOf(schema) => (schema.description, None, None),
+        Schema::OneOf(schema) => (schema.description, None, None),
+        Schema::Array(schema) => (
             schema.description,
             None,
             Some(String::from("Can be specified more than once.")),
diff --git a/proxmox-schema/src/schema.rs b/proxmox-schema/src/schema.rs
index ddbbacd4..df87e070 100644
--- a/proxmox-schema/src/schema.rs
+++ b/proxmox-schema/src/schema.rs
@@ -595,7 +595,7 @@ impl ArraySchema {
     /// Verify JSON value using an `ArraySchema`.
     pub fn verify_json(&self, data: &Value) -> Result<(), Error> {
         let list = match data {
-            Value::Array(ref list) => list,
+            Value::Array(list) => list,
             Value::Object(_) => bail!("Expected array - got object."),
             _ => bail!("Expected array - got scalar value."),
         };
@@ -1078,7 +1078,7 @@ pub trait ObjectSchemaType: private::Sealed + Send + Sync {
     /// Verify JSON value using an object schema.
     fn verify_json(&self, data: &Value) -> Result<(), Error> {
         let map = match data {
-            Value::Object(ref map) => map,
+            Value::Object(map) => map,
             Value::Array(_) => bail!("Expected object - got array."),
             _ => bail!("Expected object - got scalar value."),
         };
@@ -1272,7 +1272,7 @@ impl ObjectSchemaType for OneOfSchema {
 
     fn verify_json(&self, data: &Value) -> Result<(), Error> {
         let map = match data {
-            Value::Object(ref map) => map,
+            Value::Object(map) => map,
             Value::Array(_) => bail!("Expected object - got array."),
             _ => bail!("Expected object - got scalar value."),
         };
diff --git a/rustfmt.toml b/rustfmt.toml
index 3a26366d..f216078d 100644
--- a/rustfmt.toml
+++ b/rustfmt.toml
@@ -1 +1 @@
-edition = "2021"
+edition = "2024"
-- 
2.39.5



_______________________________________________
pbs-devel mailing list
pbs-devel@lists.proxmox.com
https://lists.proxmox.com/cgi-bin/mailman/listinfo/pbs-devel


^ permalink raw reply	[flat|nested] 9+ messages in thread

* [pbs-devel] [PATCH proxmox 7/9] run rustfmt with edition 2024
  2025-03-04 14:40 [pbs-devel] [PATCH proxmox 1/9] mark extern C blocks as unsafe Maximiliano Sandoval
                   ` (4 preceding siblings ...)
  2025-03-04 14:40 ` [pbs-devel] [PATCH proxmox 6/9] port to edition 2024 Maximiliano Sandoval
@ 2025-03-04 14:40 ` Maximiliano Sandoval
  2025-03-04 14:40 ` [pbs-devel] [PATCH proxmox 8/9] run cargo clippy --fix Maximiliano Sandoval
  2025-03-04 14:40 ` [pbs-devel] [PATCH proxmox 9/9] manual clippy fixes Maximiliano Sandoval
  7 siblings, 0 replies; 9+ messages in thread
From: Maximiliano Sandoval @ 2025-03-04 14:40 UTC (permalink / raw)
  To: pbs-devel

Signed-off-by: Maximiliano Sandoval <m.sandoval@proxmox.com>
---
 pbs-api-types/src/acl.rs                      |  4 +-
 pbs-api-types/src/ad.rs                       |  4 +-
 pbs-api-types/src/datastore.rs                | 16 ++---
 pbs-api-types/src/jobs.rs                     | 17 +++--
 pbs-api-types/src/ldap.rs                     |  5 +-
 pbs-api-types/src/lib.rs                      | 20 +++---
 pbs-api-types/src/maintenance.rs              |  4 +-
 pbs-api-types/src/metrics.rs                  |  2 +-
 pbs-api-types/src/openid.rs                   |  2 +-
 pbs-api-types/src/pathpatterns.rs             |  2 +-
 pbs-api-types/src/percent_encoding.rs         |  2 +-
 pbs-api-types/src/tape/changer.rs             |  2 +-
 pbs-api-types/src/tape/drive.rs               |  6 +-
 pbs-api-types/src/tape/media_location.rs      |  2 +-
 pbs-api-types/src/tape/media_pool.rs          |  2 +-
 pbs-api-types/src/tape/mod.rs                 |  4 +-
 pbs-api-types/src/traffic_control.rs          |  2 +-
 pbs-api-types/src/user.rs                     |  4 +-
 pbs-api-types/src/version.rs                  |  2 +-
 proxmox-access-control/src/acl.rs             | 27 ++++----
 .../src/cached_user_info.rs                   |  2 +-
 proxmox-access-control/src/init.rs            |  2 +-
 proxmox-access-control/src/token_shadow.rs    |  6 +-
 proxmox-access-control/src/types.rs           |  5 +-
 proxmox-access-control/src/user.rs            |  4 +-
 proxmox-acme-api/src/account_config.rs        |  4 +-
 proxmox-acme-api/src/acme_plugin.rs           |  2 +-
 proxmox-acme-api/src/certificate_helpers.rs   |  6 +-
 proxmox-acme-api/src/lib.rs                   |  2 +-
 proxmox-acme-api/src/plugin_api_impl.rs       |  4 +-
 proxmox-acme-api/src/plugin_config.rs         |  4 +-
 proxmox-acme-api/src/types.rs                 |  2 +-
 proxmox-acme/src/account.rs                   |  2 +-
 proxmox-acme/src/async_client.rs              |  2 +-
 proxmox-acme/src/authorization.rs             |  2 +-
 proxmox-acme/src/eab.rs                       |  2 +-
 proxmox-acme/src/jws.rs                       |  2 +-
 proxmox-acme/src/key.rs                       |  2 +-
 proxmox-acme/src/order.rs                     |  2 +-
 proxmox-api-macro/src/api/enums.rs            |  2 +-
 proxmox-api-macro/src/api/method.rs           | 12 ++--
 proxmox-api-macro/src/api/mod.rs              |  2 +-
 proxmox-api-macro/src/api/structs.rs          |  2 +-
 proxmox-api-macro/src/serde.rs                |  2 +-
 proxmox-api-macro/src/util.rs                 |  2 +-
 proxmox-api-macro/tests/allof.rs              |  2 +-
 proxmox-api-macro/tests/api1.rs               |  2 +-
 proxmox-api-macro/tests/ext-schema.rs         |  2 +-
 proxmox-api-macro/tests/options.rs            |  2 +-
 proxmox-api-macro/tests/updater.rs            |  2 +-
 proxmox-apt/src/api.rs                        |  2 +-
 proxmox-apt/src/cache.rs                      |  4 +-
 proxmox-apt/src/cache_api.rs                  |  2 +-
 proxmox-apt/src/deb822/mod.rs                 |  2 +-
 proxmox-apt/src/deb822/packages_file.rs       |  2 +-
 proxmox-apt/src/deb822/release_file.rs        |  2 +-
 proxmox-apt/src/deb822/sources_file.rs        |  2 +-
 proxmox-apt/src/repositories/file.rs          |  2 +-
 .../src/repositories/file/list_parser.rs      |  2 +-
 .../src/repositories/file/sources_parser.rs   |  2 +-
 proxmox-apt/src/repositories/mod.rs           |  4 +-
 proxmox-apt/src/repositories/release.rs       |  2 +-
 proxmox-apt/src/repositories/repository.rs    |  2 +-
 proxmox-apt/tests/repositories.rs             |  6 +-
 proxmox-async/src/broadcast_future.rs         |  4 +-
 proxmox-auth-api/examples/passwd.rs           |  2 +-
 proxmox-auth-api/src/api/access.rs            |  8 +--
 proxmox-auth-api/src/api/mod.rs               |  6 +-
 proxmox-auth-api/src/api/ticket.rs            |  2 +-
 proxmox-auth-api/src/auth_key.rs              |  8 +--
 proxmox-auth-api/src/pam_authenticator.rs     |  4 +-
 .../src/password_authenticator.rs             |  2 +-
 proxmox-auth-api/src/ticket.rs                |  4 +-
 proxmox-auth-api/src/types.rs                 |  4 +-
 proxmox-client/src/client.rs                  |  2 +-
 proxmox-compression/src/zip.rs                |  2 +-
 proxmox-compression/src/zstd.rs               |  2 +-
 proxmox-config-digest/src/lib.rs              |  4 +-
 proxmox-daemon/src/command_socket.rs          |  2 +-
 proxmox-daemon/src/server.rs                  |  6 +-
 proxmox-daemon/src/state.rs                   |  6 +-
 proxmox-dns-api/src/api_types.rs              |  4 +-
 proxmox-dns-api/src/resolv_conf.rs            |  2 +-
 proxmox-http-error/src/lib.rs                 |  2 +-
 proxmox-http/src/client/connector.rs          |  2 +-
 proxmox-http/src/client/simple.rs             |  8 +--
 proxmox-http/src/proxy_config.rs              |  2 +-
 proxmox-http/src/rate_limiter.rs              |  2 +-
 proxmox-http/src/uri.rs                       |  2 +-
 proxmox-http/src/websocket/mod.rs             |  4 +-
 proxmox-human-byte/src/lib.rs                 |  2 +-
 proxmox-io/src/lib.rs                         |  2 +-
 proxmox-lang/src/lib.rs                       |  4 +-
 proxmox-ldap/src/lib.rs                       |  2 +-
 proxmox-ldap/tests/glauth.rs                  | 15 +++--
 proxmox-log/src/file_logger.rs                |  2 +-
 proxmox-log/src/lib.rs                        |  2 +-
 proxmox-log/src/tasklog_layer.rs              |  6 +-
 proxmox-metrics/src/influxdb/http.rs          |  4 +-
 proxmox-metrics/src/influxdb/utils.rs         |  2 +-
 proxmox-metrics/src/lib.rs                    |  2 +-
 proxmox-network-api/src/api_impl.rs           |  8 ++-
 proxmox-network-api/src/api_types.rs          | 10 +--
 proxmox-network-api/src/config/helper.rs      |  4 +-
 proxmox-network-api/src/config/mod.rs         |  6 +-
 proxmox-network-api/src/config/parser.rs      |  4 +-
 proxmox-notify/src/api/gotify.rs              | 46 +++++++------
 proxmox-notify/src/api/matcher.rs             | 22 ++++---
 proxmox-notify/src/api/sendmail.rs            | 36 ++++++-----
 proxmox-notify/src/api/smtp.rs                | 46 +++++++------
 proxmox-notify/src/api/webhook.rs             | 33 +++++-----
 proxmox-notify/src/config.rs                  | 22 +++----
 proxmox-notify/src/context/pbs.rs             |  2 +-
 proxmox-notify/src/context/pve.rs             |  2 +-
 proxmox-notify/src/context/test.rs            |  2 +-
 proxmox-notify/src/endpoints/gotify.rs        |  4 +-
 proxmox-notify/src/endpoints/sendmail.rs      |  4 +-
 proxmox-notify/src/endpoints/smtp.rs          |  8 +--
 proxmox-notify/src/endpoints/webhook.rs       |  6 +-
 proxmox-notify/src/lib.rs                     |  4 +-
 proxmox-notify/src/matcher.rs                 |  4 +-
 proxmox-notify/src/renderer/mod.rs            |  2 +-
 proxmox-openid/src/auth_state.rs              |  6 +-
 proxmox-openid/src/http_client.rs             |  2 +-
 proxmox-openid/src/lib.rs                     | 12 ++--
 .../examples/minimal-rest-server.rs           |  6 +-
 proxmox-rest-server/src/api_config.rs         |  8 +--
 proxmox-rest-server/src/compression.rs        |  2 +-
 proxmox-rest-server/src/connection.rs         | 10 +--
 proxmox-rest-server/src/environment.rs        |  2 +-
 proxmox-rest-server/src/formatter.rs          |  2 +-
 proxmox-rest-server/src/h2service.rs          |  2 +-
 proxmox-rest-server/src/lib.rs                |  2 +-
 proxmox-rest-server/src/rest.rs               |  8 +--
 proxmox-rest-server/src/worker_task.rs        |  6 +-
 proxmox-router/src/cli/command.rs             |  6 +-
 proxmox-router/src/cli/completion.rs          |  2 +-
 proxmox-router/src/cli/completion_helpers.rs  |  2 +-
 proxmox-router/src/cli/format.rs              |  6 +-
 proxmox-router/src/cli/mod.rs                 |  2 +-
 proxmox-router/src/cli/shellword.rs           |  2 +-
 proxmox-router/src/cli/text_table.rs          |  2 +-
 proxmox-router/src/error.rs                   |  2 +-
 proxmox-router/src/format.rs                  |  2 +-
 proxmox-router/src/permission.rs              |  2 +-
 proxmox-router/src/router.rs                  | 64 +++++++++++--------
 proxmox-router/src/stream/parsing.rs          |  4 +-
 proxmox-rrd/examples/prrd.rs                  | 10 +--
 proxmox-rrd/src/cache.rs                      |  8 +--
 proxmox-rrd/src/cache/journal.rs              |  2 +-
 proxmox-rrd/src/cache/rrd_map.rs              |  2 +-
 proxmox-rrd/src/rrd.rs                        |  4 +-
 proxmox-rrd/tests/file_format_test.rs         |  2 +-
 proxmox-schema/src/de/mod.rs                  |  6 +-
 proxmox-schema/src/de/no_schema.rs            |  2 +-
 proxmox-schema/src/format.rs                  |  2 +-
 proxmox-schema/src/property_string.rs         | 22 ++++---
 proxmox-schema/src/schema.rs                  |  4 +-
 proxmox-schema/src/upid.rs                    |  6 +-
 proxmox-schema/tests/schema_verification.rs   |  4 +-
 proxmox-section-config/src/lib.rs             |  6 +-
 proxmox-section-config/src/typed.rs           |  4 +-
 proxmox-sendmail/src/lib.rs                   |  4 +-
 proxmox-serde/src/json.rs                     |  2 +-
 proxmox-shared-cache/src/lib.rs               |  2 +-
 proxmox-shared-memory/src/lib.rs              |  2 +-
 proxmox-shared-memory/src/shared_mutex.rs     |  4 +-
 .../tests/raw_shared_mutex.rs                 |  2 +-
 proxmox-simple-config/src/lib.rs              |  2 +-
 proxmox-sortable-macro/src/lib.rs             |  2 +-
 proxmox-subscription/src/check.rs             |  6 +-
 proxmox-subscription/src/files.rs             |  8 +--
 proxmox-subscription/src/lib.rs               |  2 +-
 proxmox-subscription/src/sign.rs              |  2 +-
 proxmox-subscription/src/subscription_info.rs | 10 +--
 proxmox-sys/src/command.rs                    |  2 +-
 proxmox-sys/src/crypt.rs                      |  2 +-
 proxmox-sys/src/fd.rs                         |  4 +-
 proxmox-sys/src/fs/acl.rs                     |  2 +-
 proxmox-sys/src/fs/dir.rs                     |  4 +-
 proxmox-sys/src/fs/file.rs                    |  4 +-
 proxmox-sys/src/fs/mod.rs                     |  2 +-
 proxmox-sys/src/fs/read_dir.rs                |  2 +-
 proxmox-sys/src/linux/mod.rs                  |  2 +-
 proxmox-sys/src/linux/pid.rs                  |  2 +-
 proxmox-sys/src/linux/procfs/mod.rs           |  2 +-
 proxmox-sys/src/linux/procfs/mountinfo.rs     |  2 +-
 proxmox-sys/src/linux/tty.rs                  |  2 +-
 proxmox-sys/src/logrotate.rs                  |  6 +-
 proxmox-sys/src/macros.rs                     |  4 +-
 proxmox-sys/src/process_locker.rs             |  2 +-
 proxmox-sys/src/systemd.rs                    |  2 +-
 proxmox-systemd/src/journal.rs                |  2 +-
 proxmox-systemd/src/lib.rs                    |  2 +-
 proxmox-systemd/src/notify.rs                 |  2 +-
 proxmox-tfa/src/api/methods.rs                |  2 +-
 proxmox-tfa/src/api/mod.rs                    |  8 +--
 proxmox-tfa/src/api/recovery.rs               |  2 +-
 proxmox-tfa/src/api/webauthn.rs               |  4 +-
 proxmox-tfa/src/totp.rs                       |  8 ++-
 proxmox-tfa/src/u2f.rs                        |  6 +-
 proxmox-time-api/src/time_impl.rs             |  2 +-
 proxmox-time/src/calendar_event.rs            |  4 +-
 proxmox-time/src/daily_duration.rs            |  6 +-
 proxmox-time/src/parse_helpers.rs             |  2 +-
 proxmox-time/src/posix.rs                     |  2 +-
 proxmox-time/src/test.rs                      |  2 +-
 proxmox-time/src/time_span.rs                 |  2 +-
 proxmox-time/src/wasm.rs                      |  2 +-
 proxmox-time/src/week_days.rs                 |  2 +-
 proxmox-uuid/src/lib.rs                       |  4 +-
 proxmox-worker-task/src/lib.rs                |  2 +-
 212 files changed, 555 insertions(+), 521 deletions(-)

diff --git a/pbs-api-types/src/acl.rs b/pbs-api-types/src/acl.rs
index e2f97f06..da27606f 100644
--- a/pbs-api-types/src/acl.rs
+++ b/pbs-api-types/src/acl.rs
@@ -1,12 +1,12 @@
 use std::str::FromStr;
 
 use const_format::concatcp;
-use serde::de::{value, IntoDeserializer};
+use serde::de::{IntoDeserializer, value};
 use serde::{Deserialize, Serialize};
 
 use proxmox_lang::constnamedbitmap;
 use proxmox_schema::{
-    api, const_regex, ApiStringFormat, BooleanSchema, EnumEntry, Schema, StringSchema,
+    ApiStringFormat, BooleanSchema, EnumEntry, Schema, StringSchema, api, const_regex,
 };
 
 use crate::PROXMOX_SAFE_ID_REGEX_STR;
diff --git a/pbs-api-types/src/ad.rs b/pbs-api-types/src/ad.rs
index 910571a0..bf408f56 100644
--- a/pbs-api-types/src/ad.rs
+++ b/pbs-api-types/src/ad.rs
@@ -1,9 +1,9 @@
 use serde::{Deserialize, Serialize};
 
-use proxmox_schema::{api, Updater};
+use proxmox_schema::{Updater, api};
 
 use super::{
-    LdapMode, LDAP_DOMAIN_SCHEMA, REALM_ID_SCHEMA, SINGLE_LINE_COMMENT_SCHEMA,
+    LDAP_DOMAIN_SCHEMA, LdapMode, REALM_ID_SCHEMA, SINGLE_LINE_COMMENT_SCHEMA,
     SYNC_ATTRIBUTES_SCHEMA, SYNC_DEFAULTS_STRING_SCHEMA, USER_CLASSES_SCHEMA,
 };
 
diff --git a/pbs-api-types/src/datastore.rs b/pbs-api-types/src/datastore.rs
index ddd8d3c6..79cb84ba 100644
--- a/pbs-api-types/src/datastore.rs
+++ b/pbs-api-types/src/datastore.rs
@@ -4,21 +4,21 @@ use std::path::{Path, PathBuf};
 use std::str::FromStr;
 use std::sync::LazyLock;
 
-use anyhow::{bail, format_err, Error};
+use anyhow::{Error, bail, format_err};
 use const_format::concatcp;
 use serde::{Deserialize, Serialize};
 
 use proxmox_schema::{
-    api, const_regex, ApiStringFormat, ApiType, ArraySchema, EnumEntry, IntegerSchema, ReturnType,
-    Schema, StringSchema, Updater, UpdaterType,
+    ApiStringFormat, ApiType, ArraySchema, EnumEntry, IntegerSchema, ReturnType, Schema,
+    StringSchema, Updater, UpdaterType, api, const_regex,
 };
 
 use crate::{
-    Authid, CryptMode, Fingerprint, GroupFilter, MaintenanceMode, MaintenanceType, Userid,
-    BACKUP_ID_RE, BACKUP_NS_RE, BACKUP_TIME_RE, BACKUP_TYPE_RE, DATASTORE_NOTIFY_STRING_SCHEMA,
-    GC_SCHEDULE_SCHEMA, GROUP_OR_SNAPSHOT_PATH_REGEX_STR, PROXMOX_SAFE_ID_FORMAT,
-    PROXMOX_SAFE_ID_REGEX_STR, PRUNE_SCHEDULE_SCHEMA, SHA256_HEX_REGEX, SINGLE_LINE_COMMENT_SCHEMA,
-    SNAPSHOT_PATH_REGEX_STR, UPID,
+    Authid, BACKUP_ID_RE, BACKUP_NS_RE, BACKUP_TIME_RE, BACKUP_TYPE_RE, CryptMode,
+    DATASTORE_NOTIFY_STRING_SCHEMA, Fingerprint, GC_SCHEDULE_SCHEMA,
+    GROUP_OR_SNAPSHOT_PATH_REGEX_STR, GroupFilter, MaintenanceMode, MaintenanceType,
+    PROXMOX_SAFE_ID_FORMAT, PROXMOX_SAFE_ID_REGEX_STR, PRUNE_SCHEDULE_SCHEMA, SHA256_HEX_REGEX,
+    SINGLE_LINE_COMMENT_SCHEMA, SNAPSHOT_PATH_REGEX_STR, UPID, Userid,
 };
 
 const_regex! {
diff --git a/pbs-api-types/src/jobs.rs b/pbs-api-types/src/jobs.rs
index 04631d92..15dd41b5 100644
--- a/pbs-api-types/src/jobs.rs
+++ b/pbs-api-types/src/jobs.rs
@@ -8,10 +8,11 @@ use serde::{Deserialize, Serialize};
 use proxmox_schema::*;
 
 use crate::{
-    Authid, BackupNamespace, BackupType, NotificationMode, RateLimitConfig, Userid,
-    BACKUP_GROUP_SCHEMA, BACKUP_NAMESPACE_SCHEMA, BACKUP_NS_RE, DATASTORE_SCHEMA,
-    DRIVE_NAME_SCHEMA, MEDIA_POOL_NAME_SCHEMA, NS_MAX_DEPTH_REDUCED_SCHEMA, PROXMOX_SAFE_ID_FORMAT,
-    PROXMOX_SAFE_ID_REGEX_STR, REMOTE_ID_SCHEMA, SINGLE_LINE_COMMENT_SCHEMA,
+    Authid, BACKUP_GROUP_SCHEMA, BACKUP_NAMESPACE_SCHEMA, BACKUP_NS_RE, BackupNamespace,
+    BackupType, DATASTORE_SCHEMA, DRIVE_NAME_SCHEMA, MEDIA_POOL_NAME_SCHEMA,
+    NS_MAX_DEPTH_REDUCED_SCHEMA, NotificationMode, PROXMOX_SAFE_ID_FORMAT,
+    PROXMOX_SAFE_ID_REGEX_STR, REMOTE_ID_SCHEMA, RateLimitConfig, SINGLE_LINE_COMMENT_SCHEMA,
+    Userid,
 };
 
 const_regex! {
@@ -416,11 +417,15 @@ impl std::str::FromStr for FilterType {
 
     fn from_str(s: &str) -> Result<Self, Self::Err> {
         Ok(match s.split_once(':') {
-            Some(("group", value)) => BACKUP_GROUP_SCHEMA.parse_simple_value(value).map(|_| FilterType::Group(value.to_string()))?,
+            Some(("group", value)) => BACKUP_GROUP_SCHEMA
+                .parse_simple_value(value)
+                .map(|_| FilterType::Group(value.to_string()))?,
             Some(("type", value)) => FilterType::BackupType(value.parse()?),
             Some(("regex", value)) => FilterType::Regex(Regex::new(value)?),
             Some((ty, _value)) => bail!("expected 'group', 'type' or 'regex' prefix, got '{}'", ty),
-            None => bail!("input doesn't match expected format '<group:GROUP||type:<vm|ct|host>|regex:REGEX>'"),
+            None => bail!(
+                "input doesn't match expected format '<group:GROUP||type:<vm|ct|host>|regex:REGEX>'"
+            ),
         })
     }
 }
diff --git a/pbs-api-types/src/ldap.rs b/pbs-api-types/src/ldap.rs
index a3e0407b..f40046c5 100644
--- a/pbs-api-types/src/ldap.rs
+++ b/pbs-api-types/src/ldap.rs
@@ -1,6 +1,6 @@
 use serde::{Deserialize, Serialize};
 
-use proxmox_schema::{api, ApiStringFormat, ApiType, ArraySchema, Schema, StringSchema, Updater};
+use proxmox_schema::{ApiStringFormat, ApiType, ArraySchema, Schema, StringSchema, Updater, api};
 
 use super::{REALM_ID_SCHEMA, SINGLE_LINE_COMMENT_SCHEMA};
 
@@ -148,8 +148,7 @@ pub const SYNC_DEFAULTS_STRING_SCHEMA: Schema = StringSchema::new("sync defaults
     ))
     .schema();
 
-const REMOVE_VANISHED_DESCRIPTION: &str =
-    "A semicolon-separated list of things to remove when they or the user \
+const REMOVE_VANISHED_DESCRIPTION: &str = "A semicolon-separated list of things to remove when they or the user \
 vanishes during user synchronization. The following values are possible: ``entry`` removes the \
 user when not returned from the sync; ``properties`` removes any  \
 properties on existing user that do not appear in the source. \
diff --git a/pbs-api-types/src/lib.rs b/pbs-api-types/src/lib.rs
index acc2fca3..128345e8 100644
--- a/pbs-api-types/src/lib.rs
+++ b/pbs-api-types/src/lib.rs
@@ -6,7 +6,7 @@ use serde::{Deserialize, Serialize};
 pub mod percent_encoding;
 
 use proxmox_schema::{
-    api, const_regex, ApiStringFormat, ApiType, ArraySchema, ReturnType, Schema, StringSchema,
+    ApiStringFormat, ApiType, ArraySchema, ReturnType, Schema, StringSchema, api, const_regex,
 };
 use proxmox_time::parse_daily_duration;
 
@@ -21,7 +21,7 @@ pub use proxmox_schema::api_types::{
 pub use proxmox_schema::api_types::{DNS_ALIAS_REGEX, DNS_NAME_OR_IP_REGEX, DNS_NAME_REGEX};
 pub use proxmox_schema::api_types::{FINGERPRINT_SHA256_REGEX, SHA256_HEX_REGEX};
 pub use proxmox_schema::api_types::{
-    GENERIC_URI_REGEX, HOSTNAME_REGEX, HOST_PORT_REGEX, HTTP_URL_REGEX,
+    GENERIC_URI_REGEX, HOST_PORT_REGEX, HOSTNAME_REGEX, HTTP_URL_REGEX,
 };
 pub use proxmox_schema::api_types::{MULTI_LINE_COMMENT_REGEX, SINGLE_LINE_COMMENT_REGEX};
 pub use proxmox_schema::api_types::{PASSWORD_REGEX, SYSTEMD_DATETIME_REGEX, UUID_REGEX};
@@ -29,13 +29,13 @@ pub use proxmox_schema::api_types::{PASSWORD_REGEX, SYSTEMD_DATETIME_REGEX, UUID
 pub use proxmox_schema::api_types::{CIDR_FORMAT, CIDR_REGEX};
 pub use proxmox_schema::api_types::{CIDR_V4_FORMAT, CIDR_V4_REGEX};
 pub use proxmox_schema::api_types::{CIDR_V6_FORMAT, CIDR_V6_REGEX};
-pub use proxmox_schema::api_types::{IPRE_STR, IP_FORMAT, IP_REGEX};
-pub use proxmox_schema::api_types::{IPV4RE_STR, IP_V4_FORMAT, IP_V4_REGEX};
-pub use proxmox_schema::api_types::{IPV6RE_STR, IP_V6_FORMAT, IP_V6_REGEX};
+pub use proxmox_schema::api_types::{IP_FORMAT, IP_REGEX, IPRE_STR};
+pub use proxmox_schema::api_types::{IP_V4_FORMAT, IP_V4_REGEX, IPV4RE_STR};
+pub use proxmox_schema::api_types::{IP_V6_FORMAT, IP_V6_REGEX, IPV6RE_STR};
 
 pub use proxmox_schema::api_types::COMMENT_SCHEMA as SINGLE_LINE_COMMENT_SCHEMA;
-pub use proxmox_schema::api_types::HOSTNAME_SCHEMA;
 pub use proxmox_schema::api_types::HOST_PORT_SCHEMA;
+pub use proxmox_schema::api_types::HOSTNAME_SCHEMA;
 pub use proxmox_schema::api_types::HTTP_URL_SCHEMA;
 pub use proxmox_schema::api_types::MULTI_LINE_COMMENT_SCHEMA;
 pub use proxmox_schema::api_types::NODE_SCHEMA;
@@ -113,12 +113,12 @@ pub use node::*;
 
 pub use proxmox_auth_api::types as userid;
 pub use proxmox_auth_api::types::{Authid, Userid};
-pub use proxmox_auth_api::types::{Realm, RealmRef};
-pub use proxmox_auth_api::types::{Tokenname, TokennameRef};
-pub use proxmox_auth_api::types::{Username, UsernameRef};
 pub use proxmox_auth_api::types::{
     PROXMOX_GROUP_ID_SCHEMA, PROXMOX_TOKEN_ID_SCHEMA, PROXMOX_TOKEN_NAME_SCHEMA,
 };
+pub use proxmox_auth_api::types::{Realm, RealmRef};
+pub use proxmox_auth_api::types::{Tokenname, TokennameRef};
+pub use proxmox_auth_api::types::{Username, UsernameRef};
 
 #[macro_use]
 mod user;
@@ -127,7 +127,7 @@ pub use user::*;
 pub use proxmox_schema::upid::*;
 
 mod crypto;
-pub use crypto::{bytes_as_fingerprint, CryptMode, Fingerprint};
+pub use crypto::{CryptMode, Fingerprint, bytes_as_fingerprint};
 
 pub mod file_restore;
 
diff --git a/pbs-api-types/src/maintenance.rs b/pbs-api-types/src/maintenance.rs
index 3c9aa819..85a0054e 100644
--- a/pbs-api-types/src/maintenance.rs
+++ b/pbs-api-types/src/maintenance.rs
@@ -1,8 +1,8 @@
-use anyhow::{bail, Error};
+use anyhow::{Error, bail};
 use serde::{Deserialize, Serialize};
 use std::borrow::Cow;
 
-use proxmox_schema::{api, const_regex, ApiStringFormat, Schema, StringSchema};
+use proxmox_schema::{ApiStringFormat, Schema, StringSchema, api, const_regex};
 
 const_regex! {
     pub MAINTENANCE_MESSAGE_REGEX = r"^[[:^cntrl:]]*$";
diff --git a/pbs-api-types/src/metrics.rs b/pbs-api-types/src/metrics.rs
index ee901276..0eb3c264 100644
--- a/pbs-api-types/src/metrics.rs
+++ b/pbs-api-types/src/metrics.rs
@@ -3,7 +3,7 @@ use serde::{Deserialize, Serialize};
 use crate::{
     HOST_PORT_SCHEMA, HTTP_URL_SCHEMA, PROXMOX_SAFE_ID_FORMAT, SINGLE_LINE_COMMENT_SCHEMA,
 };
-use proxmox_schema::{api, Schema, StringSchema, Updater};
+use proxmox_schema::{Schema, StringSchema, Updater, api};
 
 pub const METRIC_SERVER_ID_SCHEMA: Schema = StringSchema::new("Metrics Server ID.")
     .format(&PROXMOX_SAFE_ID_FORMAT)
diff --git a/pbs-api-types/src/openid.rs b/pbs-api-types/src/openid.rs
index 2c95c5c6..9869d39a 100644
--- a/pbs-api-types/src/openid.rs
+++ b/pbs-api-types/src/openid.rs
@@ -1,6 +1,6 @@
 use serde::{Deserialize, Serialize};
 
-use proxmox_schema::{api, ApiStringFormat, ArraySchema, Schema, StringSchema, Updater};
+use proxmox_schema::{ApiStringFormat, ArraySchema, Schema, StringSchema, Updater, api};
 
 use super::{
     GENERIC_URI_REGEX, PROXMOX_SAFE_ID_FORMAT, PROXMOX_SAFE_ID_REGEX, REALM_ID_SCHEMA,
diff --git a/pbs-api-types/src/pathpatterns.rs b/pbs-api-types/src/pathpatterns.rs
index 505ecc8a..84f193ae 100644
--- a/pbs-api-types/src/pathpatterns.rs
+++ b/pbs-api-types/src/pathpatterns.rs
@@ -1,4 +1,4 @@
-use proxmox_schema::{const_regex, ApiStringFormat, ApiType, Schema, StringSchema};
+use proxmox_schema::{ApiStringFormat, ApiType, Schema, StringSchema, const_regex};
 
 use serde::{Deserialize, Serialize};
 
diff --git a/pbs-api-types/src/percent_encoding.rs b/pbs-api-types/src/percent_encoding.rs
index afe011e2..6d6dcf80 100644
--- a/pbs-api-types/src/percent_encoding.rs
+++ b/pbs-api-types/src/percent_encoding.rs
@@ -1,4 +1,4 @@
-use percent_encoding::{utf8_percent_encode, AsciiSet};
+use percent_encoding::{AsciiSet, utf8_percent_encode};
 
 /// This used to be: `SIMPLE_ENCODE_SET` plus space, `"`, `#`, `<`, `>`, backtick, `?`, `{`, `}`
 pub const DEFAULT_ENCODE_SET: &AsciiSet = &percent_encoding::CONTROLS // 0..1f and 7e
diff --git a/pbs-api-types/src/tape/changer.rs b/pbs-api-types/src/tape/changer.rs
index df3823cf..3bf2b46c 100644
--- a/pbs-api-types/src/tape/changer.rs
+++ b/pbs-api-types/src/tape/changer.rs
@@ -3,7 +3,7 @@
 use serde::{Deserialize, Serialize};
 
 use proxmox_schema::{
-    api, ApiStringFormat, ArraySchema, IntegerSchema, Schema, StringSchema, Updater,
+    ApiStringFormat, ArraySchema, IntegerSchema, Schema, StringSchema, Updater, api,
 };
 
 use crate::{OptionalDeviceIdentification, PROXMOX_SAFE_ID_FORMAT};
diff --git a/pbs-api-types/src/tape/drive.rs b/pbs-api-types/src/tape/drive.rs
index e00665cd..73add439 100644
--- a/pbs-api-types/src/tape/drive.rs
+++ b/pbs-api-types/src/tape/drive.rs
@@ -1,10 +1,10 @@
 //! Types for tape drive API
-use anyhow::{bail, Error};
+use anyhow::{Error, bail};
 use serde::{Deserialize, Serialize};
 
-use proxmox_schema::{api, IntegerSchema, Schema, StringSchema, Updater};
+use proxmox_schema::{IntegerSchema, Schema, StringSchema, Updater, api};
 
-use crate::{OptionalDeviceIdentification, CHANGER_NAME_SCHEMA, PROXMOX_SAFE_ID_FORMAT};
+use crate::{CHANGER_NAME_SCHEMA, OptionalDeviceIdentification, PROXMOX_SAFE_ID_FORMAT};
 
 pub const DRIVE_NAME_SCHEMA: Schema = StringSchema::new("Drive Identifier.")
     .format(&PROXMOX_SAFE_ID_FORMAT)
diff --git a/pbs-api-types/src/tape/media_location.rs b/pbs-api-types/src/tape/media_location.rs
index 608460b5..03cc876f 100644
--- a/pbs-api-types/src/tape/media_location.rs
+++ b/pbs-api-types/src/tape/media_location.rs
@@ -1,4 +1,4 @@
-use anyhow::{bail, Error};
+use anyhow::{Error, bail};
 
 use proxmox_schema::{ApiStringFormat, Schema, StringSchema};
 
diff --git a/pbs-api-types/src/tape/media_pool.rs b/pbs-api-types/src/tape/media_pool.rs
index c3eacec7..46d528f1 100644
--- a/pbs-api-types/src/tape/media_pool.rs
+++ b/pbs-api-types/src/tape/media_pool.rs
@@ -9,7 +9,7 @@ use std::str::FromStr;
 use anyhow::Error;
 use serde::{Deserialize, Serialize};
 
-use proxmox_schema::{api, ApiStringFormat, Schema, StringSchema, Updater};
+use proxmox_schema::{ApiStringFormat, Schema, StringSchema, Updater, api};
 
 use proxmox_time::{CalendarEvent, TimeSpan};
 
diff --git a/pbs-api-types/src/tape/mod.rs b/pbs-api-types/src/tape/mod.rs
index 6a9d56bc..0034d65c 100644
--- a/pbs-api-types/src/tape/mod.rs
+++ b/pbs-api-types/src/tape/mod.rs
@@ -25,11 +25,11 @@ pub use media::*;
 use const_format::concatcp;
 use serde::{Deserialize, Serialize};
 
-use proxmox_schema::{api, const_regex, ApiStringFormat, Schema, StringSchema};
+use proxmox_schema::{ApiStringFormat, Schema, StringSchema, api, const_regex};
 use proxmox_uuid::Uuid;
 
 use crate::{
-    BackupType, BACKUP_ID_SCHEMA, BACKUP_NS_PATH_RE, FINGERPRINT_SHA256_FORMAT,
+    BACKUP_ID_SCHEMA, BACKUP_NS_PATH_RE, BackupType, FINGERPRINT_SHA256_FORMAT,
     PROXMOX_SAFE_ID_REGEX_STR, SNAPSHOT_PATH_REGEX_STR,
 };
 
diff --git a/pbs-api-types/src/traffic_control.rs b/pbs-api-types/src/traffic_control.rs
index c68f4637..94c37e0b 100644
--- a/pbs-api-types/src/traffic_control.rs
+++ b/pbs-api-types/src/traffic_control.rs
@@ -1,7 +1,7 @@
 use serde::{Deserialize, Serialize};
 
 use proxmox_human_byte::HumanByte;
-use proxmox_schema::{api, ApiType, Schema, StringSchema, Updater};
+use proxmox_schema::{ApiType, Schema, StringSchema, Updater, api};
 
 use crate::{
     CIDR_SCHEMA, DAILY_DURATION_FORMAT, PROXMOX_SAFE_ID_FORMAT, SINGLE_LINE_COMMENT_SCHEMA,
diff --git a/pbs-api-types/src/user.rs b/pbs-api-types/src/user.rs
index 42f41266..31b698b1 100644
--- a/pbs-api-types/src/user.rs
+++ b/pbs-api-types/src/user.rs
@@ -1,8 +1,8 @@
 use serde::{Deserialize, Serialize};
 
-use proxmox_schema::{api, BooleanSchema, IntegerSchema, Schema, StringSchema, Updater};
+use proxmox_schema::{BooleanSchema, IntegerSchema, Schema, StringSchema, Updater, api};
 
-use super::userid::{Authid, Userid, PROXMOX_TOKEN_ID_SCHEMA};
+use super::userid::{Authid, PROXMOX_TOKEN_ID_SCHEMA, Userid};
 use super::{SINGLE_LINE_COMMENT_FORMAT, SINGLE_LINE_COMMENT_SCHEMA};
 
 pub const ENABLE_USER_SCHEMA: Schema = BooleanSchema::new(
diff --git a/pbs-api-types/src/version.rs b/pbs-api-types/src/version.rs
index 09e725eb..aeaa38b9 100644
--- a/pbs-api-types/src/version.rs
+++ b/pbs-api-types/src/version.rs
@@ -2,7 +2,7 @@
 use std::cmp::Ordering;
 use std::convert::TryFrom;
 
-use anyhow::{format_err, Context};
+use anyhow::{Context, format_err};
 
 use proxmox_schema::api;
 
diff --git a/proxmox-access-control/src/acl.rs b/proxmox-access-control/src/acl.rs
index 1964abe2..2e5df932 100644
--- a/proxmox-access-control/src/acl.rs
+++ b/proxmox-access-control/src/acl.rs
@@ -3,11 +3,11 @@ use std::io::Write;
 use std::path::Path;
 use std::sync::{Arc, OnceLock, RwLock};
 
-use anyhow::{bail, Error};
+use anyhow::{Error, bail};
 
 use proxmox_auth_api::types::{Authid, Userid};
 use proxmox_config_digest::ConfigDigest;
-use proxmox_product_config::{open_api_lockfile, replace_privileged_config, ApiLockGuard};
+use proxmox_product_config::{ApiLockGuard, open_api_lockfile, replace_privileged_config};
 
 use crate::init::{access_conf, acl_config, acl_config_lock};
 
@@ -645,7 +645,7 @@ pub fn save_config(acl: &AclTree) -> Result<(), Error> {
 mod test {
     use std::{collections::HashMap, sync::OnceLock};
 
-    use crate::init::{init_access_config, AccessControlConfig};
+    use crate::init::{AccessControlConfig, init_access_config};
 
     use super::AclTree;
     use anyhow::Error;
@@ -867,9 +867,10 @@ mod test {
         );
 
         // user2 has no privileges under "/store/store2/store3" --> return empty
-        assert!(tree
-            .get_child_paths(&user2, &["store", "store2", "store3"],)?
-            .is_empty());
+        assert!(
+            tree.get_child_paths(&user2, &["store", "store2", "store3"],)?
+                .is_empty()
+        );
 
         // user2 has DatastoreReader privileges under "/store/store2/store31" --> return paths
         let paths = tree.get_child_paths(&user2, &["store/store2/store31"])?;
@@ -878,15 +879,17 @@ mod test {
         );
 
         // user2 has no privileges under "/store/store2/foo/bar/baz"
-        assert!(tree
-            .get_child_paths(&user2, &["store", "store2", "foo/bar/baz"])?
-            .is_empty());
+        assert!(
+            tree.get_child_paths(&user2, &["store", "store2", "foo/bar/baz"])?
+                .is_empty()
+        );
 
         // user2 has DatastoreReader privileges on "/store/store2/store31/store4/store6", but not
         // on any child paths --> return empty
-        assert!(tree
-            .get_child_paths(&user2, &["store/store2/store31/store4/store6"],)?
-            .is_empty());
+        assert!(
+            tree.get_child_paths(&user2, &["store/store2/store31/store4/store6"],)?
+                .is_empty()
+        );
 
         Ok(())
     }
diff --git a/proxmox-access-control/src/cached_user_info.rs b/proxmox-access-control/src/cached_user_info.rs
index 4d011f00..4c58e468 100644
--- a/proxmox-access-control/src/cached_user_info.rs
+++ b/proxmox-access-control/src/cached_user_info.rs
@@ -2,7 +2,7 @@
 
 use std::sync::{Arc, OnceLock, RwLock};
 
-use anyhow::{bail, Error};
+use anyhow::{Error, bail};
 
 use proxmox_auth_api::types::{Authid, Userid};
 use proxmox_router::UserInformation;
diff --git a/proxmox-access-control/src/init.rs b/proxmox-access-control/src/init.rs
index b0cf1a3e..a3183ce7 100644
--- a/proxmox-access-control/src/init.rs
+++ b/proxmox-access-control/src/init.rs
@@ -2,7 +2,7 @@ use std::collections::HashMap;
 use std::path::{Path, PathBuf};
 use std::sync::OnceLock;
 
-use anyhow::{format_err, Error};
+use anyhow::{Error, format_err};
 
 use proxmox_auth_api::types::{Authid, Userid};
 use proxmox_section_config::SectionConfigData;
diff --git a/proxmox-access-control/src/token_shadow.rs b/proxmox-access-control/src/token_shadow.rs
index 60b71ac9..bd37376a 100644
--- a/proxmox-access-control/src/token_shadow.rs
+++ b/proxmox-access-control/src/token_shadow.rs
@@ -1,11 +1,11 @@
 use std::collections::HashMap;
 
-use anyhow::{bail, format_err, Error};
+use anyhow::{Error, bail, format_err};
 use serde::{Deserialize, Serialize};
-use serde_json::{from_value, Value};
+use serde_json::{Value, from_value};
 
 use proxmox_auth_api::types::Authid;
-use proxmox_product_config::{open_api_lockfile, replace_config, ApiLockGuard};
+use proxmox_product_config::{ApiLockGuard, open_api_lockfile, replace_config};
 
 use crate::init::{token_shadow, token_shadow_lock};
 
diff --git a/proxmox-access-control/src/types.rs b/proxmox-access-control/src/types.rs
index ae6de7cf..de11e26b 100644
--- a/proxmox-access-control/src/types.rs
+++ b/proxmox-access-control/src/types.rs
@@ -1,10 +1,9 @@
 use serde::{Deserialize, Serialize};
 
-use proxmox_auth_api::types::{Authid, Userid, PROXMOX_TOKEN_ID_SCHEMA};
+use proxmox_auth_api::types::{Authid, PROXMOX_TOKEN_ID_SCHEMA, Userid};
 use proxmox_schema::{
-    api,
+    BooleanSchema, IntegerSchema, Schema, StringSchema, Updater, api,
     api_types::{COMMENT_SCHEMA, SINGLE_LINE_COMMENT_FORMAT},
-    BooleanSchema, IntegerSchema, Schema, StringSchema, Updater,
 };
 
 pub const ENABLE_USER_SCHEMA: Schema = BooleanSchema::new(
diff --git a/proxmox-access-control/src/user.rs b/proxmox-access-control/src/user.rs
index 95b70f25..0d60f520 100644
--- a/proxmox-access-control/src/user.rs
+++ b/proxmox-access-control/src/user.rs
@@ -1,11 +1,11 @@
 use std::collections::HashMap;
 use std::sync::{Arc, OnceLock, RwLock};
 
-use anyhow::{bail, Error};
+use anyhow::{Error, bail};
 
 use proxmox_auth_api::types::Authid;
 use proxmox_config_digest::ConfigDigest;
-use proxmox_product_config::{open_api_lockfile, replace_privileged_config, ApiLockGuard};
+use proxmox_product_config::{ApiLockGuard, open_api_lockfile, replace_privileged_config};
 use proxmox_schema::*;
 use proxmox_section_config::{SectionConfig, SectionConfigData, SectionConfigPlugin};
 
diff --git a/proxmox-acme-api/src/account_config.rs b/proxmox-acme-api/src/account_config.rs
index 0ced6926..140c1415 100644
--- a/proxmox-acme-api/src/account_config.rs
+++ b/proxmox-acme-api/src/account_config.rs
@@ -5,7 +5,7 @@ use std::ops::ControlFlow;
 use std::os::unix::fs::OpenOptionsExt;
 use std::path::{Path, PathBuf};
 
-use anyhow::{bail, format_err, Error};
+use anyhow::{Error, bail, format_err};
 use serde::{Deserialize, Serialize};
 
 use proxmox_product_config::replace_secret_config;
@@ -13,9 +13,9 @@ use proxmox_sys::error::SysError;
 
 use proxmox_schema::api_types::SAFE_ID_REGEX;
 
+use proxmox_acme::Account;
 use proxmox_acme::async_client::AcmeClient;
 use proxmox_acme::types::AccountData as AcmeAccountData;
-use proxmox_acme::Account;
 
 use crate::acme_account_dir;
 use crate::types::AcmeAccountName;
diff --git a/proxmox-acme-api/src/acme_plugin.rs b/proxmox-acme-api/src/acme_plugin.rs
index cd4012f5..a01d5087 100644
--- a/proxmox-acme-api/src/acme_plugin.rs
+++ b/proxmox-acme-api/src/acme_plugin.rs
@@ -6,7 +6,7 @@ use std::process::Stdio;
 use std::sync::Arc;
 use std::time::Duration;
 
-use anyhow::{bail, format_err, Error};
+use anyhow::{Error, bail, format_err};
 use hyper::{Body, Request, Response};
 use tokio::io::{AsyncBufReadExt, AsyncRead, AsyncWriteExt, BufReader};
 use tokio::process::Command;
diff --git a/proxmox-acme-api/src/certificate_helpers.rs b/proxmox-acme-api/src/certificate_helpers.rs
index a0d744c8..854e98e6 100644
--- a/proxmox-acme-api/src/certificate_helpers.rs
+++ b/proxmox-acme-api/src/certificate_helpers.rs
@@ -4,17 +4,17 @@ use std::time::Duration;
 
 use foreign_types::ForeignTypeRef;
 
-use anyhow::{bail, format_err, Error};
+use anyhow::{Error, bail, format_err};
 use openssl::pkey::{PKey, Private};
 use openssl::rsa::Rsa;
-use openssl::x509::{X509Builder, X509};
+use openssl::x509::{X509, X509Builder};
 
 use proxmox_acme::async_client::AcmeClient;
 use proxmox_log::{info, warn};
 use proxmox_rest_server::WorkerTask;
 
-use crate::types::{AcmeConfig, AcmeDomain};
 use crate::CertificateInfo;
+use crate::types::{AcmeConfig, AcmeDomain};
 
 pub async fn revoke_certificate(acme_config: &AcmeConfig, certificate: &[u8]) -> Result<(), Error> {
     let mut acme = super::account_config::load_account_config(&acme_config.account)
diff --git a/proxmox-acme-api/src/lib.rs b/proxmox-acme-api/src/lib.rs
index 623e9e23..196269b6 100644
--- a/proxmox-acme-api/src/lib.rs
+++ b/proxmox-acme-api/src/lib.rs
@@ -17,7 +17,7 @@ pub use config::{DEFAULT_ACME_DIRECTORY_ENTRY, KNOWN_ACME_DIRECTORIES};
 #[cfg(feature = "impl")]
 mod challenge_schemas;
 #[cfg(feature = "impl")]
-pub use challenge_schemas::{get_cached_challenge_schemas, ChallengeSchemaWrapper};
+pub use challenge_schemas::{ChallengeSchemaWrapper, get_cached_challenge_schemas};
 
 #[cfg(feature = "impl")]
 mod account_config;
diff --git a/proxmox-acme-api/src/plugin_api_impl.rs b/proxmox-acme-api/src/plugin_api_impl.rs
index 6c2403e4..a367e535 100644
--- a/proxmox-acme-api/src/plugin_api_impl.rs
+++ b/proxmox-acme-api/src/plugin_api_impl.rs
@@ -1,6 +1,6 @@
 //! ACME plugin configuration API implementation
 
-use anyhow::{bail, format_err, Error};
+use anyhow::{Error, bail, format_err};
 
 use serde::Deserialize;
 use serde_json::Value;
@@ -12,7 +12,7 @@ use crate::types::{
     DeletablePluginProperty, DnsPlugin, DnsPluginCore, DnsPluginCoreUpdater, PluginConfig,
 };
 
-use proxmox_router::{http_bail, RpcEnvironment};
+use proxmox_router::{RpcEnvironment, http_bail};
 
 pub fn list_plugins(rpcenv: &mut dyn RpcEnvironment) -> Result<Vec<PluginConfig>, Error> {
     let (plugins, digest) = super::plugin_config::plugin_config()?;
diff --git a/proxmox-acme-api/src/plugin_config.rs b/proxmox-acme-api/src/plugin_config.rs
index b7ed7594..e61b3f72 100644
--- a/proxmox-acme-api/src/plugin_config.rs
+++ b/proxmox-acme-api/src/plugin_config.rs
@@ -6,11 +6,11 @@ use anyhow::Error;
 use serde_json::Value;
 
 use proxmox_config_digest::ConfigDigest;
-use proxmox_product_config::{open_api_lockfile, replace_secret_config, ApiLockGuard};
+use proxmox_product_config::{ApiLockGuard, open_api_lockfile, replace_secret_config};
 use proxmox_schema::{ApiType, Schema};
 use proxmox_section_config::{SectionConfig, SectionConfigData, SectionConfigPlugin};
 
-use crate::types::{DnsPlugin, StandalonePlugin, PLUGIN_ID_SCHEMA};
+use crate::types::{DnsPlugin, PLUGIN_ID_SCHEMA, StandalonePlugin};
 
 static CONFIG: LazyLock<SectionConfig> = LazyLock::new(init);
 
diff --git a/proxmox-acme-api/src/types.rs b/proxmox-acme-api/src/types.rs
index d46497ca..934e6ece 100644
--- a/proxmox-acme-api/src/types.rs
+++ b/proxmox-acme-api/src/types.rs
@@ -7,7 +7,7 @@ use serde::{Deserialize, Serialize};
 use serde_json::Value;
 
 use proxmox_schema::api_types::{DNS_ALIAS_FORMAT, DNS_NAME_FORMAT, SAFE_ID_FORMAT};
-use proxmox_schema::{api, ApiStringFormat, ApiType, Schema, StringSchema, Updater};
+use proxmox_schema::{ApiStringFormat, ApiType, Schema, StringSchema, Updater, api};
 
 use proxmox_acme::types::AccountData as AcmeAccountData;
 
diff --git a/proxmox-acme/src/account.rs b/proxmox-acme/src/account.rs
index 6993b2cf..3e5a3ec3 100644
--- a/proxmox-acme/src/account.rs
+++ b/proxmox-acme/src/account.rs
@@ -8,6 +8,7 @@ use openssl::pkey::{PKey, Private};
 use serde::{Deserialize, Serialize};
 use serde_json::Value;
 
+use crate::Error;
 use crate::authorization::{Authorization, GetAuthorization};
 use crate::b64u;
 use crate::directory::Directory;
@@ -16,7 +17,6 @@ use crate::key::{Jwk, PublicKey};
 use crate::order::{NewOrder, Order, OrderData};
 use crate::request::Request;
 use crate::types::{AccountData, AccountStatus, ExternalAccountBinding};
-use crate::Error;
 
 /// An ACME Account.
 ///
diff --git a/proxmox-acme/src/async_client.rs b/proxmox-acme/src/async_client.rs
index ce5a6c79..dec10842 100644
--- a/proxmox-acme/src/async_client.rs
+++ b/proxmox-acme/src/async_client.rs
@@ -7,9 +7,9 @@ use serde::{Deserialize, Serialize};
 
 use proxmox_http::client::Client;
 
+use crate::Request as AcmeRequest;
 use crate::account::AccountCreator;
 use crate::order::{Order, OrderData};
-use crate::Request as AcmeRequest;
 use crate::{Account, Authorization, Challenge, Directory, Error, ErrorResponse};
 
 /// A non-blocking Acme client using tokio/hyper.
diff --git a/proxmox-acme/src/authorization.rs b/proxmox-acme/src/authorization.rs
index 28bc1b4b..a4a1f019 100644
--- a/proxmox-acme/src/authorization.rs
+++ b/proxmox-acme/src/authorization.rs
@@ -5,9 +5,9 @@ use std::collections::HashMap;
 use serde::{Deserialize, Serialize};
 use serde_json::Value;
 
+use crate::Error;
 use crate::order::Identifier;
 use crate::request::Request;
-use crate::Error;
 
 /// Status of an [`Authorization`].
 #[derive(Clone, Copy, Debug, Eq, PartialEq, Deserialize, Serialize)]
diff --git a/proxmox-acme/src/eab.rs b/proxmox-acme/src/eab.rs
index 3e0d2816..7052a54f 100644
--- a/proxmox-acme/src/eab.rs
+++ b/proxmox-acme/src/eab.rs
@@ -6,7 +6,7 @@ use serde::Serialize;
 
 use crate::key::Jwk;
 use crate::types::ExternalAccountBinding;
-use crate::{b64u, Error};
+use crate::{Error, b64u};
 
 #[derive(Debug, Serialize)]
 #[serde(rename_all = "camelCase")]
diff --git a/proxmox-acme/src/jws.rs b/proxmox-acme/src/jws.rs
index b867f714..350cd451 100644
--- a/proxmox-acme/src/jws.rs
+++ b/proxmox-acme/src/jws.rs
@@ -5,9 +5,9 @@ use openssl::pkey::{HasPrivate, PKeyRef};
 use openssl::sign::Signer;
 use serde::Serialize;
 
+use crate::Error;
 use crate::b64u;
 use crate::key::{Jwk, PublicKey};
-use crate::Error;
 
 #[derive(Debug, Serialize)]
 #[serde(rename_all = "camelCase")]
diff --git a/proxmox-acme/src/key.rs b/proxmox-acme/src/key.rs
index 5dbc5460..ae790d04 100644
--- a/proxmox-acme/src/key.rs
+++ b/proxmox-acme/src/key.rs
@@ -4,8 +4,8 @@ use openssl::hash::{Hasher, MessageDigest};
 use openssl::pkey::{HasPublic, Id, PKeyRef};
 use serde::Serialize;
 
-use crate::b64u;
 use crate::Error;
+use crate::b64u;
 
 /// An RSA public key.
 #[derive(Clone, Debug, Serialize)]
diff --git a/proxmox-acme/src/order.rs b/proxmox-acme/src/order.rs
index b6551004..d75fbde1 100644
--- a/proxmox-acme/src/order.rs
+++ b/proxmox-acme/src/order.rs
@@ -3,8 +3,8 @@
 use serde::{Deserialize, Serialize};
 use serde_json::Value;
 
-use crate::request::Request;
 use crate::Error;
+use crate::request::Request;
 
 /// Status of an [`Order`].
 #[derive(Clone, Copy, Debug, Eq, PartialEq, Deserialize, Serialize)]
diff --git a/proxmox-api-macro/src/api/enums.rs b/proxmox-api-macro/src/api/enums.rs
index 9b122f9c..f3de7929 100644
--- a/proxmox-api-macro/src/api/enums.rs
+++ b/proxmox-api-macro/src/api/enums.rs
@@ -6,8 +6,8 @@ use proc_macro2::{Ident, Span, TokenStream};
 use quote::quote_spanned;
 use syn::spanned::Spanned;
 
-use super::attributes::EnumFieldAttributes;
 use super::Schema;
+use super::attributes::EnumFieldAttributes;
 use crate::serde;
 use crate::util::{self, FieldName, JSONObject, JSONValue, Maybe};
 
diff --git a/proxmox-api-macro/src/api/method.rs b/proxmox-api-macro/src/api/method.rs
index cca07145..0804b67d 100644
--- a/proxmox-api-macro/src/api/method.rs
+++ b/proxmox-api-macro/src/api/method.rs
@@ -11,11 +11,11 @@ use std::mem;
 use anyhow::Error;
 
 use proc_macro2::{Span, TokenStream};
-use quote::{quote, quote_spanned, ToTokens};
+use quote::{ToTokens, quote, quote_spanned};
+use syn::Ident;
 use syn::ext::IdentExt;
 use syn::spanned::Spanned;
 use syn::visit_mut::{self, VisitMut};
-use syn::Ident;
 
 use super::{ObjectEntry, Schema, SchemaItem, SchemaObject};
 use crate::util::{self, FieldName, JSONObject, JSONValue, Maybe};
@@ -93,11 +93,7 @@ impl TryFrom<JSONObject> for ReturnSchema {
             Some(value) => {
                 let span = value.span();
                 let is_optional: bool = value.try_into()?;
-                if is_optional {
-                    Some(span)
-                } else {
-                    None
-                }
+                if is_optional { Some(span) } else { None }
             }
             None => None,
         };
@@ -523,7 +519,7 @@ fn is_value_type(ty: &syn::Type) -> bool {
             1 => return segs.last().unwrap().ident == "Value",
             2 => {
                 return segs.first().unwrap().ident == "serde_json"
-                    && segs.last().unwrap().ident == "Value"
+                    && segs.last().unwrap().ident == "Value";
             }
             _ => return false,
         }
diff --git a/proxmox-api-macro/src/api/mod.rs b/proxmox-api-macro/src/api/mod.rs
index 416ea56e..8078db07 100644
--- a/proxmox-api-macro/src/api/mod.rs
+++ b/proxmox-api-macro/src/api/mod.rs
@@ -12,7 +12,7 @@ use std::convert::{TryFrom, TryInto};
 use anyhow::Error;
 
 use proc_macro2::{Span, TokenStream};
-use quote::{quote, quote_spanned, ToTokens};
+use quote::{ToTokens, quote, quote_spanned};
 use syn::parse::{Parse, ParseStream, Parser};
 use syn::spanned::Spanned;
 use syn::{Expr, ExprPath, Ident};
diff --git a/proxmox-api-macro/src/api/structs.rs b/proxmox-api-macro/src/api/structs.rs
index c18b20b4..e11c68ad 100644
--- a/proxmox-api-macro/src/api/structs.rs
+++ b/proxmox-api-macro/src/api/structs.rs
@@ -18,8 +18,8 @@ use anyhow::Error;
 use proc_macro2::{Ident, Span, TokenStream};
 use quote::quote_spanned;
 
-use super::attributes::UpdaterFieldAttributes;
 use super::Schema;
+use super::attributes::UpdaterFieldAttributes;
 use crate::api::{self, ObjectEntry, SchemaItem};
 use crate::serde;
 use crate::util::{self, FieldName, JSONObject, Maybe};
diff --git a/proxmox-api-macro/src/serde.rs b/proxmox-api-macro/src/serde.rs
index 62430f16..9993f9e5 100644
--- a/proxmox-api-macro/src/serde.rs
+++ b/proxmox-api-macro/src/serde.rs
@@ -6,9 +6,9 @@
 use std::convert::TryFrom;
 
 use proc_macro2::Span;
+use syn::Token;
 use syn::punctuated::Punctuated;
 use syn::spanned::Spanned;
-use syn::Token;
 
 /// Serde name types.
 #[allow(clippy::enum_variant_names)]
diff --git a/proxmox-api-macro/src/util.rs b/proxmox-api-macro/src/util.rs
index 11a83e46..003f5c3b 100644
--- a/proxmox-api-macro/src/util.rs
+++ b/proxmox-api-macro/src/util.rs
@@ -4,10 +4,10 @@ use std::convert::TryFrom;
 
 use proc_macro2::{Ident, Span, TokenStream, TokenTree};
 use quote::ToTokens;
+use syn::Token;
 use syn::parse::{Parse, ParseStream};
 use syn::punctuated::Punctuated;
 use syn::spanned::Spanned;
-use syn::Token;
 
 use anyhow::Error;
 
diff --git a/proxmox-api-macro/tests/allof.rs b/proxmox-api-macro/tests/allof.rs
index 57089d26..eaaf5606 100644
--- a/proxmox-api-macro/tests/allof.rs
+++ b/proxmox-api-macro/tests/allof.rs
@@ -2,7 +2,7 @@
 
 use anyhow::Error;
 use serde::{Deserialize, Serialize};
-use serde_json::{json, Value};
+use serde_json::{Value, json};
 
 use proxmox_api_macro::api;
 use proxmox_schema as schema;
diff --git a/proxmox-api-macro/tests/api1.rs b/proxmox-api-macro/tests/api1.rs
index cff0cd5b..125733fb 100644
--- a/proxmox-api-macro/tests/api1.rs
+++ b/proxmox-api-macro/tests/api1.rs
@@ -1,7 +1,7 @@
 use proxmox_api_macro::api;
 
 use anyhow::Error;
-use serde_json::{json, Value};
+use serde_json::{Value, json};
 
 use proxmox_router::Permission;
 
diff --git a/proxmox-api-macro/tests/ext-schema.rs b/proxmox-api-macro/tests/ext-schema.rs
index 4c88de0e..3e2d1cdf 100644
--- a/proxmox-api-macro/tests/ext-schema.rs
+++ b/proxmox-api-macro/tests/ext-schema.rs
@@ -6,7 +6,7 @@ use proxmox_router::RpcEnvironment;
 use proxmox_schema as schema;
 
 use anyhow::Error;
-use serde_json::{json, Value};
+use serde_json::{Value, json};
 
 pub const NAME_SCHEMA: schema::Schema = schema::StringSchema::new("Archive name.")
     //.format(&FILENAME_FORMAT)
diff --git a/proxmox-api-macro/tests/options.rs b/proxmox-api-macro/tests/options.rs
index 6a7fa1ba..6d61cc10 100644
--- a/proxmox-api-macro/tests/options.rs
+++ b/proxmox-api-macro/tests/options.rs
@@ -1,7 +1,7 @@
 use proxmox_api_macro::api;
 
 use anyhow::Error;
-use serde_json::{json, Value};
+use serde_json::{Value, json};
 
 #[api(
     input: {
diff --git a/proxmox-api-macro/tests/updater.rs b/proxmox-api-macro/tests/updater.rs
index 43f97da2..b04abedf 100644
--- a/proxmox-api-macro/tests/updater.rs
+++ b/proxmox-api-macro/tests/updater.rs
@@ -2,7 +2,7 @@
 
 use serde::{Deserialize, Serialize};
 
-use proxmox_schema::{api, ApiType, Updater, UpdaterType};
+use proxmox_schema::{ApiType, Updater, UpdaterType, api};
 
 // Helpers for type checks:
 struct AssertTypeEq<T>(T);
diff --git a/proxmox-apt/src/api.rs b/proxmox-apt/src/api.rs
index 14dfb53b..42c609ee 100644
--- a/proxmox-apt/src/api.rs
+++ b/proxmox-apt/src/api.rs
@@ -1,7 +1,7 @@
 // API function that work without feature "cache"
 use std::path::Path;
 
-use anyhow::{bail, Error};
+use anyhow::{Error, bail};
 
 use proxmox_apt_api_types::{
     APTChangeRepositoryOptions, APTGetChangelogOptions, APTRepositoriesResult, APTRepositoryFile,
diff --git a/proxmox-apt/src/cache.rs b/proxmox-apt/src/cache.rs
index 03315013..1c04481f 100644
--- a/proxmox-apt/src/cache.rs
+++ b/proxmox-apt/src/cache.rs
@@ -2,11 +2,11 @@ use std::collections::HashMap;
 use std::collections::HashSet;
 use std::path::Path;
 
-use anyhow::{bail, format_err, Error};
+use anyhow::{Error, bail, format_err};
 use apt_pkg_native::Cache;
 
 use proxmox_schema::const_regex;
-use proxmox_sys::fs::{file_read_optional_string, replace_file, CreateOptions};
+use proxmox_sys::fs::{CreateOptions, file_read_optional_string, replace_file};
 
 use proxmox_apt_api_types::APTUpdateInfo;
 
diff --git a/proxmox-apt/src/cache_api.rs b/proxmox-apt/src/cache_api.rs
index a2cd67f8..205f30e9 100644
--- a/proxmox-apt/src/cache_api.rs
+++ b/proxmox-apt/src/cache_api.rs
@@ -1,7 +1,7 @@
 // API function that need feature "cache"
 use std::path::Path;
 
-use anyhow::{bail, format_err, Error};
+use anyhow::{Error, bail, format_err};
 use std::os::unix::prelude::OsStrExt;
 
 use proxmox_apt_api_types::{APTUpdateInfo, APTUpdateOptions};
diff --git a/proxmox-apt/src/deb822/mod.rs b/proxmox-apt/src/deb822/mod.rs
index 59e7c210..d13c8670 100644
--- a/proxmox-apt/src/deb822/mod.rs
+++ b/proxmox-apt/src/deb822/mod.rs
@@ -1,5 +1,5 @@
 mod release_file;
-use anyhow::{bail, Error};
+use anyhow::{Error, bail};
 pub use release_file::{CompressionType, FileReference, FileReferenceType, ReleaseFile};
 
 mod packages_file;
diff --git a/proxmox-apt/src/deb822/packages_file.rs b/proxmox-apt/src/deb822/packages_file.rs
index aec0a926..7f691ebb 100644
--- a/proxmox-apt/src/deb822/packages_file.rs
+++ b/proxmox-apt/src/deb822/packages_file.rs
@@ -1,6 +1,6 @@
 use std::collections::HashMap;
 
-use anyhow::{bail, Error};
+use anyhow::{Error, bail};
 use rfc822_like::de::Deserializer;
 use serde::Deserialize;
 use serde_json::Value;
diff --git a/proxmox-apt/src/deb822/release_file.rs b/proxmox-apt/src/deb822/release_file.rs
index dbf1a367..68a626fb 100644
--- a/proxmox-apt/src/deb822/release_file.rs
+++ b/proxmox-apt/src/deb822/release_file.rs
@@ -1,6 +1,6 @@
 use std::collections::HashMap;
 
-use anyhow::{bail, format_err, Error};
+use anyhow::{Error, bail, format_err};
 use rfc822_like::de::Deserializer;
 use serde::Deserialize;
 use serde_json::Value;
diff --git a/proxmox-apt/src/deb822/sources_file.rs b/proxmox-apt/src/deb822/sources_file.rs
index 40bef6e0..3893350e 100644
--- a/proxmox-apt/src/deb822/sources_file.rs
+++ b/proxmox-apt/src/deb822/sources_file.rs
@@ -1,6 +1,6 @@
 use std::collections::HashMap;
 
-use anyhow::{bail, format_err, Error};
+use anyhow::{Error, bail, format_err};
 use rfc822_like::de::Deserializer;
 use serde::Deserialize;
 use serde_json::Value;
diff --git a/proxmox-apt/src/repositories/file.rs b/proxmox-apt/src/repositories/file.rs
index e34e84e0..debf0f40 100644
--- a/proxmox-apt/src/repositories/file.rs
+++ b/proxmox-apt/src/repositories/file.rs
@@ -1,6 +1,6 @@
 use std::path::{Path, PathBuf};
 
-use anyhow::{format_err, Error};
+use anyhow::{Error, format_err};
 
 use crate::repositories::release::DebianCodename;
 use proxmox_apt_api_types::{
diff --git a/proxmox-apt/src/repositories/file/list_parser.rs b/proxmox-apt/src/repositories/file/list_parser.rs
index 8681509a..3e143ade 100644
--- a/proxmox-apt/src/repositories/file/list_parser.rs
+++ b/proxmox-apt/src/repositories/file/list_parser.rs
@@ -1,7 +1,7 @@
 use std::io::BufRead;
 use std::iter::Iterator;
 
-use anyhow::{bail, format_err, Error};
+use anyhow::{Error, bail, format_err};
 
 use super::APTRepositoryParser;
 use crate::repositories::APTRepositoryImpl;
diff --git a/proxmox-apt/src/repositories/file/sources_parser.rs b/proxmox-apt/src/repositories/file/sources_parser.rs
index c85b8d2e..bc6a616f 100644
--- a/proxmox-apt/src/repositories/file/sources_parser.rs
+++ b/proxmox-apt/src/repositories/file/sources_parser.rs
@@ -1,7 +1,7 @@
 use std::io::BufRead;
 use std::iter::Iterator;
 
-use anyhow::{bail, Error};
+use anyhow::{Error, bail};
 
 use crate::repositories::APTRepositoryImpl;
 use crate::repositories::{
diff --git a/proxmox-apt/src/repositories/mod.rs b/proxmox-apt/src/repositories/mod.rs
index 5665de40..69b0ffa9 100644
--- a/proxmox-apt/src/repositories/mod.rs
+++ b/proxmox-apt/src/repositories/mod.rs
@@ -1,7 +1,7 @@
 use std::collections::BTreeMap;
 use std::path::{Path, PathBuf};
 
-use anyhow::{bail, Error};
+use anyhow::{Error, bail};
 
 mod repository;
 use proxmox_apt_api_types::{
@@ -16,7 +16,7 @@ mod file;
 pub use file::APTRepositoryFileImpl;
 
 mod release;
-pub use release::{get_current_release_codename, DebianCodename};
+pub use release::{DebianCodename, get_current_release_codename};
 
 mod standard;
 pub use standard::{APTRepositoryHandleImpl, APTStandardRepositoryImpl};
diff --git a/proxmox-apt/src/repositories/release.rs b/proxmox-apt/src/repositories/release.rs
index da391e58..9a4fabba 100644
--- a/proxmox-apt/src/repositories/release.rs
+++ b/proxmox-apt/src/repositories/release.rs
@@ -1,7 +1,7 @@
 use std::fmt::Display;
 use std::io::{BufRead, BufReader};
 
-use anyhow::{bail, format_err, Error};
+use anyhow::{Error, bail, format_err};
 
 /// The code names of Debian releases. Does not include `sid`.
 #[derive(Clone, Copy, PartialEq, Eq, PartialOrd, Ord)]
diff --git a/proxmox-apt/src/repositories/repository.rs b/proxmox-apt/src/repositories/repository.rs
index 62ad49d8..548ca103 100644
--- a/proxmox-apt/src/repositories/repository.rs
+++ b/proxmox-apt/src/repositories/repository.rs
@@ -1,7 +1,7 @@
 use std::io::{BufRead, BufReader, Write};
 use std::path::{Path, PathBuf};
 
-use anyhow::{bail, format_err, Error};
+use anyhow::{Error, bail, format_err};
 
 use crate::repositories::standard::APTRepositoryHandleImpl;
 use proxmox_apt_api_types::{
diff --git a/proxmox-apt/tests/repositories.rs b/proxmox-apt/tests/repositories.rs
index 61d770b3..01b21da3 100644
--- a/proxmox-apt/tests/repositories.rs
+++ b/proxmox-apt/tests/repositories.rs
@@ -1,12 +1,12 @@
 use std::path::PathBuf;
 
-use anyhow::{bail, format_err, Error};
+use anyhow::{Error, bail, format_err};
 
 use proxmox_apt::repositories::{
-    check_repositories, get_current_release_codename, standard_repositories, DebianCodename,
+    APTRepositoryFileImpl, APTRepositoryImpl, APTStandardRepositoryImpl,
 };
 use proxmox_apt::repositories::{
-    APTRepositoryFileImpl, APTRepositoryImpl, APTStandardRepositoryImpl,
+    DebianCodename, check_repositories, get_current_release_codename, standard_repositories,
 };
 use proxmox_apt_api_types::{
     APTRepositoryFile, APTRepositoryHandle, APTRepositoryInfo, APTStandardRepository,
diff --git a/proxmox-async/src/broadcast_future.rs b/proxmox-async/src/broadcast_future.rs
index 62982e13..c71880f6 100644
--- a/proxmox-async/src/broadcast_future.rs
+++ b/proxmox-async/src/broadcast_future.rs
@@ -4,7 +4,7 @@ use std::future::Future;
 use std::pin::Pin;
 use std::sync::{Arc, Mutex};
 
-use anyhow::{format_err, Error};
+use anyhow::{Error, format_err};
 use futures::future::{FutureExt, TryFutureExt};
 use tokio::sync::oneshot;
 
@@ -44,7 +44,7 @@ impl<T: Clone> BroadcastData<T> {
     }
 
     pub fn listen(&mut self) -> impl Future<Output = Result<T, Error>> + use<T> {
-        use futures::future::{ok, Either};
+        use futures::future::{Either, ok};
 
         match &self.result {
             None => {}
diff --git a/proxmox-auth-api/examples/passwd.rs b/proxmox-auth-api/examples/passwd.rs
index 27816271..58397b28 100644
--- a/proxmox-auth-api/examples/passwd.rs
+++ b/proxmox-auth-api/examples/passwd.rs
@@ -5,7 +5,7 @@ use std::io::Write;
 use std::pin::Pin;
 use std::task::{Context, Poll};
 
-use anyhow::{bail, format_err, Error};
+use anyhow::{Error, bail, format_err};
 
 use proxmox_auth_api::api::Authenticator;
 use proxmox_auth_api::types::Username;
diff --git a/proxmox-auth-api/src/api/access.rs b/proxmox-auth-api/src/api/access.rs
index f7d52e95..3ac2fd46 100644
--- a/proxmox-auth-api/src/api/access.rs
+++ b/proxmox-auth-api/src/api/access.rs
@@ -1,16 +1,16 @@
 //! Provides the "/access/ticket" API call.
 
-use anyhow::{bail, format_err, Error};
+use anyhow::{Error, bail, format_err};
 use openssl::hash::MessageDigest;
-use serde_json::{json, Value};
+use serde_json::{Value, json};
 
 use proxmox_rest_server::RestEnvironment;
-use proxmox_router::{http_err, Permission, RpcEnvironment};
+use proxmox_router::{Permission, RpcEnvironment, http_err};
 use proxmox_schema::{api, api_types::PASSWORD_SCHEMA};
 use proxmox_tfa::api::TfaChallenge;
 
 use super::ApiTicket;
-use super::{auth_context, HMACKey};
+use super::{HMACKey, auth_context};
 use crate::ticket::Ticket;
 use crate::types::{Authid, Userid};
 
diff --git a/proxmox-auth-api/src/api/mod.rs b/proxmox-auth-api/src/api/mod.rs
index a6f9d425..3a425d63 100644
--- a/proxmox-auth-api/src/api/mod.rs
+++ b/proxmox-auth-api/src/api/mod.rs
@@ -3,10 +3,10 @@ use std::net::IpAddr;
 use std::pin::Pin;
 use std::sync::Mutex;
 
-use anyhow::{format_err, Error};
+use anyhow::{Error, format_err};
 use percent_encoding::percent_decode_str;
 
-use proxmox_rest_server::{extract_cookie, AuthError};
+use proxmox_rest_server::{AuthError, extract_cookie};
 use proxmox_tfa::api::{OpenUserChallengeData, TfaConfig};
 
 use crate::auth_key::{HMACKey, Keyring};
@@ -18,7 +18,7 @@ mod ticket;
 use crate::ticket::Ticket;
 use access::verify_csrf_prevention_token;
 
-pub use access::{assemble_csrf_prevention_token, create_ticket, API_METHOD_CREATE_TICKET};
+pub use access::{API_METHOD_CREATE_TICKET, assemble_csrf_prevention_token, create_ticket};
 pub use ticket::{ApiTicket, PartialTicket};
 
 /// Authentication realms are used to manage users: authenticate, change password or remove.
diff --git a/proxmox-auth-api/src/api/ticket.rs b/proxmox-auth-api/src/api/ticket.rs
index f2d1580b..bf959c7e 100644
--- a/proxmox-auth-api/src/api/ticket.rs
+++ b/proxmox-auth-api/src/api/ticket.rs
@@ -2,7 +2,7 @@
 
 use std::fmt;
 
-use anyhow::{bail, Error};
+use anyhow::{Error, bail};
 use serde::{Deserialize, Serialize};
 
 use proxmox_tfa::api::TfaChallenge;
diff --git a/proxmox-auth-api/src/auth_key.rs b/proxmox-auth-api/src/auth_key.rs
index 9873d935..98684853 100644
--- a/proxmox-auth-api/src/auth_key.rs
+++ b/proxmox-auth-api/src/auth_key.rs
@@ -1,6 +1,6 @@
 //! Auth key handling.
 
-use anyhow::{bail, format_err, Error};
+use anyhow::{Error, bail, format_err};
 use openssl::hash::MessageDigest;
 use openssl::pkey::{HasPublic, Id, PKey, PKeyRef, Private, Public};
 use openssl::rsa::Rsa;
@@ -314,7 +314,7 @@ impl Keyring {
         if let Some(key) = &self.signing_key {
             match key {
                 SigningKey::Private(key) if verify_with(&key.key, digest, signature, data)? => {
-                    return Ok(true)
+                    return Ok(true);
                 }
                 SigningKey::Hmac(key) if key.verify(digest, signature, data)? => return Ok(true),
                 _ => (),
@@ -324,10 +324,10 @@ impl Keyring {
         for key in &self.public_keys {
             match key {
                 VerificationKey::Public(key) if verify_with(&key.key, digest, signature, data)? => {
-                    return Ok(true)
+                    return Ok(true);
                 }
                 VerificationKey::Hmac(key) if key.verify(digest, signature, data)? => {
-                    return Ok(true)
+                    return Ok(true);
                 }
                 _ => (),
             }
diff --git a/proxmox-auth-api/src/pam_authenticator.rs b/proxmox-auth-api/src/pam_authenticator.rs
index d34575be..a2a1b1ad 100644
--- a/proxmox-auth-api/src/pam_authenticator.rs
+++ b/proxmox-auth-api/src/pam_authenticator.rs
@@ -1,9 +1,9 @@
-use std::ffi::{c_int, c_void, CStr, CString};
+use std::ffi::{CStr, CString, c_int, c_void};
 use std::future::Future;
 use std::net::IpAddr;
 use std::pin::Pin;
 
-use anyhow::{bail, format_err, Error};
+use anyhow::{Error, bail, format_err};
 use pam_sys::types::{
     PamHandle, PamItemType, PamMessage, PamMessageStyle, PamResponse, PamReturnCode,
 };
diff --git a/proxmox-auth-api/src/password_authenticator.rs b/proxmox-auth-api/src/password_authenticator.rs
index 06b6551a..6a946bb0 100644
--- a/proxmox-auth-api/src/password_authenticator.rs
+++ b/proxmox-auth-api/src/password_authenticator.rs
@@ -2,7 +2,7 @@ use std::future::Future;
 use std::net::IpAddr;
 use std::pin::Pin;
 
-use anyhow::{bail, Error};
+use anyhow::{Error, bail};
 use serde_json::json;
 
 use proxmox_product_config::open_secret_lockfile;
diff --git a/proxmox-auth-api/src/ticket.rs b/proxmox-auth-api/src/ticket.rs
index 498e9385..12f81145 100644
--- a/proxmox-auth-api/src/ticket.rs
+++ b/proxmox-auth-api/src/ticket.rs
@@ -3,9 +3,9 @@
 use std::borrow::Cow;
 use std::marker::PhantomData;
 
-use anyhow::{bail, format_err, Error};
+use anyhow::{Error, bail, format_err};
 use openssl::hash::MessageDigest;
-use percent_encoding::{percent_decode_str, percent_encode, AsciiSet};
+use percent_encoding::{AsciiSet, percent_decode_str, percent_encode};
 
 use crate::auth_key::Keyring;
 
diff --git a/proxmox-auth-api/src/types.rs b/proxmox-auth-api/src/types.rs
index 64c580a5..79989941 100644
--- a/proxmox-auth-api/src/types.rs
+++ b/proxmox-auth-api/src/types.rs
@@ -25,12 +25,12 @@ use std::borrow::Borrow;
 use std::fmt;
 use std::sync::LazyLock;
 
-use anyhow::{bail, format_err, Error};
+use anyhow::{Error, bail, format_err};
 use const_format::concatcp;
 use serde::{Deserialize, Serialize};
 
 use proxmox_schema::{
-    api, const_regex, ApiStringFormat, ApiType, Schema, StringSchema, UpdaterType,
+    ApiStringFormat, ApiType, Schema, StringSchema, UpdaterType, api, const_regex,
 };
 
 use proxmox_schema::api_types::SAFE_ID_REGEX_STR;
diff --git a/proxmox-client/src/client.rs b/proxmox-client/src/client.rs
index 9b078a98..a3edb840 100644
--- a/proxmox-client/src/client.rs
+++ b/proxmox-client/src/client.rs
@@ -4,9 +4,9 @@ use std::pin::Pin;
 use std::sync::Arc;
 use std::sync::Mutex;
 
+use http::Method;
 use http::request::Request;
 use http::uri::PathAndQuery;
-use http::Method;
 use http::{StatusCode, Uri};
 use hyper::body::{Body, HttpBody};
 use openssl::hash::MessageDigest;
diff --git a/proxmox-compression/src/zip.rs b/proxmox-compression/src/zip.rs
index 3ccece9b..d074be5a 100644
--- a/proxmox-compression/src/zip.rs
+++ b/proxmox-compression/src/zip.rs
@@ -14,7 +14,7 @@ use std::pin::Pin;
 use std::task::{Context, Poll};
 use std::time::SystemTime;
 
-use anyhow::{format_err, Error, Result};
+use anyhow::{Error, Result, format_err};
 use endian_trait::Endian;
 use futures::ready;
 use tokio::io::{AsyncRead, AsyncWrite, AsyncWriteExt, ReadBuf};
diff --git a/proxmox-compression/src/zstd.rs b/proxmox-compression/src/zstd.rs
index 7e303833..471d65ec 100644
--- a/proxmox-compression/src/zstd.rs
+++ b/proxmox-compression/src/zstd.rs
@@ -3,7 +3,7 @@ use std::io;
 use std::pin::Pin;
 use std::task::{Context, Poll};
 
-use anyhow::{format_err, Error};
+use anyhow::{Error, format_err};
 use bytes::Bytes;
 use futures::ready;
 use futures::stream::Stream;
diff --git a/proxmox-config-digest/src/lib.rs b/proxmox-config-digest/src/lib.rs
index a34a3a90..85827f36 100644
--- a/proxmox-config-digest/src/lib.rs
+++ b/proxmox-config-digest/src/lib.rs
@@ -1,15 +1,15 @@
 #![cfg_attr(docsrs, feature(doc_cfg, doc_auto_cfg))]
 
-use anyhow::{bail, Error};
+use anyhow::{Error, bail};
 
 #[cfg(feature = "openssl")]
 use openssl::sha;
 
-use proxmox_schema::api_types::SHA256_HEX_REGEX;
 use proxmox_schema::ApiStringFormat;
 use proxmox_schema::ApiType;
 use proxmox_schema::Schema;
 use proxmox_schema::StringSchema;
+use proxmox_schema::api_types::SHA256_HEX_REGEX;
 
 pub const PROXMOX_CONFIG_DIGEST_FORMAT: ApiStringFormat =
     ApiStringFormat::Pattern(&SHA256_HEX_REGEX);
diff --git a/proxmox-daemon/src/command_socket.rs b/proxmox-daemon/src/command_socket.rs
index b268bded..49d640bc 100644
--- a/proxmox-daemon/src/command_socket.rs
+++ b/proxmox-daemon/src/command_socket.rs
@@ -1,4 +1,4 @@
-use anyhow::{bail, format_err, Error};
+use anyhow::{Error, bail, format_err};
 
 use std::collections::HashMap;
 use std::future::Future;
diff --git a/proxmox-daemon/src/server.rs b/proxmox-daemon/src/server.rs
index 670e3c3b..de070404 100644
--- a/proxmox-daemon/src/server.rs
+++ b/proxmox-daemon/src/server.rs
@@ -7,11 +7,11 @@ use std::os::unix::ffi::OsStrExt;
 use std::os::unix::io::{AsRawFd, FromRawFd, IntoRawFd, OwnedFd, RawFd};
 use std::panic::UnwindSafe;
 use std::path::PathBuf;
-use std::pin::{pin, Pin};
+use std::pin::{Pin, pin};
 
-use anyhow::{bail, format_err, Error};
+use anyhow::{Error, bail, format_err};
 use futures::future::{self, Either};
-use nix::unistd::{fork, ForkResult};
+use nix::unistd::{ForkResult, fork};
 
 use proxmox_sys::fd::fd_change_cloexec;
 use proxmox_sys::fs::CreateOptions;
diff --git a/proxmox-daemon/src/state.rs b/proxmox-daemon/src/state.rs
index f5d23bcf..e1bde586 100644
--- a/proxmox-daemon/src/state.rs
+++ b/proxmox-daemon/src/state.rs
@@ -1,10 +1,10 @@
 use std::future::Future;
 use std::pin::pin;
-use std::sync::atomic::{AtomicBool, Ordering};
 use std::sync::OnceLock;
+use std::sync::atomic::{AtomicBool, Ordering};
 
-use anyhow::{bail, Error};
-use tokio::signal::unix::{signal, SignalKind};
+use anyhow::{Error, bail};
+use tokio::signal::unix::{SignalKind, signal};
 use tokio::sync::watch;
 
 static SHUTDOWN_LISTENERS: OnceLock<watch::Sender<bool>> = OnceLock::new();
diff --git a/proxmox-dns-api/src/api_types.rs b/proxmox-dns-api/src/api_types.rs
index f0ff70f4..20d8bdf9 100644
--- a/proxmox-dns-api/src/api_types.rs
+++ b/proxmox-dns-api/src/api_types.rs
@@ -1,9 +1,9 @@
 use serde::{Deserialize, Serialize};
 
-use proxmox_schema::api;
-use proxmox_schema::api_types::IP_FORMAT;
 use proxmox_schema::Schema;
 use proxmox_schema::StringSchema;
+use proxmox_schema::api;
+use proxmox_schema::api_types::IP_FORMAT;
 
 use proxmox_config_digest::ConfigDigest;
 
diff --git a/proxmox-dns-api/src/resolv_conf.rs b/proxmox-dns-api/src/resolv_conf.rs
index 32698913..03a91ee0 100644
--- a/proxmox-dns-api/src/resolv_conf.rs
+++ b/proxmox-dns-api/src/resolv_conf.rs
@@ -5,9 +5,9 @@ use const_format::concatcp;
 use proxmox_config_digest::ConfigDigest;
 use regex::Regex;
 
+use proxmox_sys::fs::CreateOptions;
 use proxmox_sys::fs::file_get_contents;
 use proxmox_sys::fs::replace_file;
-use proxmox_sys::fs::CreateOptions;
 
 use proxmox_schema::api_types::IPRE_STR;
 
diff --git a/proxmox-http-error/src/lib.rs b/proxmox-http-error/src/lib.rs
index a8ccff7f..ea404845 100644
--- a/proxmox-http-error/src/lib.rs
+++ b/proxmox-http-error/src/lib.rs
@@ -2,7 +2,7 @@
 
 use std::fmt;
 
-use serde::{ser::SerializeStruct, Serialize, Serializer};
+use serde::{Serialize, Serializer, ser::SerializeStruct};
 
 #[doc(hidden)]
 pub use http::StatusCode;
diff --git a/proxmox-http/src/client/connector.rs b/proxmox-http/src/client/connector.rs
index 63b9d10c..b803af76 100644
--- a/proxmox-http/src/client/connector.rs
+++ b/proxmox-http/src/client/connector.rs
@@ -1,4 +1,4 @@
-use anyhow::{bail, format_err, Error};
+use anyhow::{Error, bail, format_err};
 use std::os::unix::io::AsRawFd;
 use std::pin::Pin;
 use std::sync::Arc;
diff --git a/proxmox-http/src/client/simple.rs b/proxmox-http/src/client/simple.rs
index 062889ac..ae1d4f06 100644
--- a/proxmox-http/src/client/simple.rs
+++ b/proxmox-http/src/client/simple.rs
@@ -1,4 +1,4 @@
-use anyhow::{bail, format_err, Error};
+use anyhow::{Error, bail, format_err};
 use std::collections::HashMap;
 
 #[cfg(all(feature = "client-trait", feature = "proxmox-async"))]
@@ -8,13 +8,13 @@ use futures::*;
 #[cfg(all(feature = "client-trait", feature = "proxmox-async"))]
 use http::header::HeaderName;
 use http::{HeaderValue, Request, Response};
+use hyper::Body;
 use hyper::client::Client as HyperClient;
 use hyper::client::HttpConnector;
-use hyper::Body;
 use openssl::ssl::{SslConnector, SslMethod};
 
-use crate::client::HttpsConnector;
 use crate::HttpOptions;
+use crate::client::HttpsConnector;
 
 /// Asynchronous HTTP client implementation
 pub struct Client {
@@ -299,8 +299,8 @@ si aliquod aeternum et infinitum impendere."#;
     }
 
     fn encode_deflate(bytes: &[u8]) -> Result<Vec<u8>, std::io::Error> {
-        use flate2::write::ZlibEncoder;
         use flate2::Compression;
+        use flate2::write::ZlibEncoder;
 
         let mut e = ZlibEncoder::new(Vec::new(), Compression::default());
         e.write_all(bytes).unwrap();
diff --git a/proxmox-http/src/proxy_config.rs b/proxmox-http/src/proxy_config.rs
index 0861d8f7..dd8bc63f 100644
--- a/proxmox-http/src/proxy_config.rs
+++ b/proxmox-http/src/proxy_config.rs
@@ -2,7 +2,7 @@
 //!
 //! This can be used with the async [`Client`](crate::client::Client) or sync [`Client`](crate::client::sync::Client).
 
-use anyhow::{bail, format_err, Error};
+use anyhow::{Error, bail, format_err};
 
 use http::Uri;
 
diff --git a/proxmox-http/src/rate_limiter.rs b/proxmox-http/src/rate_limiter.rs
index 945c77a6..246d73c0 100644
--- a/proxmox-http/src/rate_limiter.rs
+++ b/proxmox-http/src/rate_limiter.rs
@@ -1,7 +1,7 @@
 use std::convert::TryInto;
 use std::time::{Duration, Instant};
 
-use anyhow::{bail, Error};
+use anyhow::{Error, bail};
 
 /// Rate limiter interface.
 pub trait RateLimit {
diff --git a/proxmox-http/src/uri.rs b/proxmox-http/src/uri.rs
index ecea1bca..0cf75cb6 100644
--- a/proxmox-http/src/uri.rs
+++ b/proxmox-http/src/uri.rs
@@ -1,8 +1,8 @@
 //! URI Related helpers, such as `build_authority`
 
+use anyhow::Error;
 use anyhow::bail;
 use anyhow::format_err;
-use anyhow::Error;
 use http::uri::{Authority, InvalidUri};
 use serde_json::Value;
 
diff --git a/proxmox-http/src/websocket/mod.rs b/proxmox-http/src/websocket/mod.rs
index fdbec979..ec807d92 100644
--- a/proxmox-http/src/websocket/mod.rs
+++ b/proxmox-http/src/websocket/mod.rs
@@ -9,10 +9,10 @@ use std::io;
 use std::pin::Pin;
 use std::task::{Context, Poll};
 
-use anyhow::{bail, format_err, Error};
+use anyhow::{Error, bail, format_err};
 use futures::select;
 use hyper::header::{
-    HeaderMap, HeaderValue, CONNECTION, SEC_WEBSOCKET_ACCEPT, SEC_WEBSOCKET_KEY,
+    CONNECTION, HeaderMap, HeaderValue, SEC_WEBSOCKET_ACCEPT, SEC_WEBSOCKET_KEY,
     SEC_WEBSOCKET_PROTOCOL, SEC_WEBSOCKET_VERSION, UPGRADE,
 };
 use hyper::{Body, Response, StatusCode};
diff --git a/proxmox-human-byte/src/lib.rs b/proxmox-human-byte/src/lib.rs
index 9f728fad..e6381d93 100644
--- a/proxmox-human-byte/src/lib.rs
+++ b/proxmox-human-byte/src/lib.rs
@@ -1,6 +1,6 @@
 #![cfg_attr(docsrs, feature(doc_cfg, doc_auto_cfg))]
 
-use anyhow::{bail, Error};
+use anyhow::{Error, bail};
 
 use proxmox_schema::{ApiStringFormat, ApiType, Schema, StringSchema, UpdaterType};
 
diff --git a/proxmox-io/src/lib.rs b/proxmox-io/src/lib.rs
index 1be005ff..74c11f2d 100644
--- a/proxmox-io/src/lib.rs
+++ b/proxmox-io/src/lib.rs
@@ -13,7 +13,7 @@ mod write;
 pub use write::WriteExt;
 
 mod sparse_copy;
-pub use sparse_copy::{buffer_is_zero, sparse_copy, SparseCopyResult};
+pub use sparse_copy::{SparseCopyResult, buffer_is_zero, sparse_copy};
 
 #[cfg(feature = "tokio")]
 pub use sparse_copy::sparse_copy_async;
diff --git a/proxmox-lang/src/lib.rs b/proxmox-lang/src/lib.rs
index 0abfd507..7e9b2200 100644
--- a/proxmox-lang/src/lib.rs
+++ b/proxmox-lang/src/lib.rs
@@ -102,7 +102,5 @@ macro_rules! offsetof {
 #[deprecated = "use c\"literals\" instead"]
 #[macro_export]
 macro_rules! c_str {
-    ($data:expr) => {{
-        unsafe { ::std::ffi::CStr::from_bytes_with_nul_unchecked(concat!($data, "\0").as_bytes()) }
-    }};
+    ($data:expr) => {{ unsafe { ::std::ffi::CStr::from_bytes_with_nul_unchecked(concat!($data, "\0").as_bytes()) } }};
 }
diff --git a/proxmox-ldap/src/lib.rs b/proxmox-ldap/src/lib.rs
index 31f118ad..784767c0 100644
--- a/proxmox-ldap/src/lib.rs
+++ b/proxmox-ldap/src/lib.rs
@@ -8,7 +8,7 @@ use std::{
     time::Duration,
 };
 
-use anyhow::{bail, format_err, Context, Error};
+use anyhow::{Context, Error, bail, format_err};
 use ldap3::adapters::{Adapter, EntriesOnly, PagedResults};
 use ldap3::{Ldap, LdapConnAsync, LdapConnSettings, LdapResult, Scope, SearchEntry};
 use native_tls::{Certificate, TlsConnector, TlsConnectorBuilder};
diff --git a/proxmox-ldap/tests/glauth.rs b/proxmox-ldap/tests/glauth.rs
index d497018c..5ec5d7e8 100644
--- a/proxmox-ldap/tests/glauth.rs
+++ b/proxmox-ldap/tests/glauth.rs
@@ -151,13 +151,14 @@ fn test_search() -> Result<(), Error> {
         assert!(a.dn.starts_with("cn=test"));
         assert!(a.dn.ends_with("ou=testgroup,ou=users,dc=example,dc=com"));
 
-        assert!(a
-            .attributes
-            .get("mail")
-            .unwrap()
-            .first()
-            .unwrap()
-            .ends_with("@example.com"));
+        assert!(
+            a.attributes
+                .get("mail")
+                .unwrap()
+                .first()
+                .unwrap()
+                .ends_with("@example.com")
+        );
         assert!(a.attributes.get("sn").unwrap().first().unwrap().eq("User"));
     }
 
diff --git a/proxmox-log/src/file_logger.rs b/proxmox-log/src/file_logger.rs
index 1e67b450..b5d28ace 100644
--- a/proxmox-log/src/file_logger.rs
+++ b/proxmox-log/src/file_logger.rs
@@ -3,7 +3,7 @@ use std::io::Write;
 use anyhow::Error;
 use nix::fcntl::OFlag;
 
-use proxmox_sys::fs::{atomic_open_or_create_file, CreateOptions};
+use proxmox_sys::fs::{CreateOptions, atomic_open_or_create_file};
 
 /// Options to control the behavior of a [FileLogger] instance
 #[derive(Default)]
diff --git a/proxmox-log/src/lib.rs b/proxmox-log/src/lib.rs
index 8c74e42b..4b754a34 100644
--- a/proxmox-log/src/lib.rs
+++ b/proxmox-log/src/lib.rs
@@ -17,6 +17,7 @@ pub use file_logger::{FileLogOptions, FileLogger};
 
 mod tasklog_layer;
 
+pub use tracing::Level;
 pub use tracing::debug;
 pub use tracing::debug_span;
 pub use tracing::enabled;
@@ -31,7 +32,6 @@ pub use tracing::trace;
 pub use tracing::trace_span;
 pub use tracing::warn;
 pub use tracing::warn_span;
-pub use tracing::Level;
 pub use tracing_subscriber::filter::LevelFilter;
 
 tokio::task_local! {
diff --git a/proxmox-log/src/tasklog_layer.rs b/proxmox-log/src/tasklog_layer.rs
index 48fd7c1e..d2b7ffc5 100644
--- a/proxmox-log/src/tasklog_layer.rs
+++ b/proxmox-log/src/tasklog_layer.rs
@@ -1,12 +1,12 @@
 use std::fmt::Write as _;
 
-use tracing::field::Field;
-use tracing::field::Visit;
 use tracing::Event;
 use tracing::Level;
 use tracing::Subscriber;
-use tracing_subscriber::layer::Context;
+use tracing::field::Field;
+use tracing::field::Visit;
 use tracing_subscriber::Layer;
+use tracing_subscriber::layer::Context;
 
 use crate::{FileLogState, LogContext};
 
diff --git a/proxmox-metrics/src/influxdb/http.rs b/proxmox-metrics/src/influxdb/http.rs
index d773c16f..1a686bf9 100644
--- a/proxmox-metrics/src/influxdb/http.rs
+++ b/proxmox-metrics/src/influxdb/http.rs
@@ -1,12 +1,12 @@
 use std::sync::Arc;
 
-use anyhow::{bail, Error};
+use anyhow::{Error, bail};
 use hyper::Body;
 use openssl::ssl::{SslConnector, SslMethod, SslVerifyMode};
 use tokio::sync::mpsc;
 
-use proxmox_http::client::Client;
 use proxmox_http::HttpOptions;
+use proxmox_http::client::Client;
 
 use crate::influxdb::utils;
 use crate::{Metrics, MetricsData};
diff --git a/proxmox-metrics/src/influxdb/utils.rs b/proxmox-metrics/src/influxdb/utils.rs
index 05e304f4..0f9a7288 100644
--- a/proxmox-metrics/src/influxdb/utils.rs
+++ b/proxmox-metrics/src/influxdb/utils.rs
@@ -1,6 +1,6 @@
 use std::fmt::Write;
 
-use anyhow::{bail, Error};
+use anyhow::{Error, bail};
 use serde_json::Value;
 
 use crate::MetricsData;
diff --git a/proxmox-metrics/src/lib.rs b/proxmox-metrics/src/lib.rs
index 84e7f07d..cf7bc814 100644
--- a/proxmox-metrics/src/lib.rs
+++ b/proxmox-metrics/src/lib.rs
@@ -4,7 +4,7 @@ use std::borrow::Cow;
 use std::collections::HashMap;
 use std::sync::Arc;
 
-use anyhow::{bail, format_err, Error};
+use anyhow::{Error, bail, format_err};
 use serde::Serialize;
 use serde_json::Value;
 use tokio::sync::mpsc;
diff --git a/proxmox-network-api/src/api_impl.rs b/proxmox-network-api/src/api_impl.rs
index 18602900..9d956e2c 100644
--- a/proxmox-network-api/src/api_impl.rs
+++ b/proxmox-network-api/src/api_impl.rs
@@ -1,12 +1,12 @@
-use anyhow::{bail, Error};
+use anyhow::{Error, bail};
 
 use proxmox_config_digest::ConfigDigest;
 
-use crate::{parse_vlan_id_from_name, parse_vlan_raw_device_from_name};
 use crate::{
     DeletableInterfaceProperty, Interface, InterfaceUpdater, LinuxBondMode, NetworkConfigMethod,
     NetworkInterfaceType,
 };
+use crate::{parse_vlan_id_from_name, parse_vlan_raw_device_from_name};
 
 /// Create network interface configuration.
 pub fn create_interface(iface: String, config: InterfaceUpdater) -> Result<(), Error> {
@@ -99,7 +99,9 @@ pub fn create_interface(iface: String, config: InterfaceUpdater) -> Result<(), E
                 }
                 if config.bond_xmit_hash_policy.is_some() {
                     if mode != LinuxBondMode::Ieee802_3ad && mode != LinuxBondMode::BalanceXor {
-                        bail!("bond_xmit_hash_policy is only valid with LACP(802.3ad) or balance-xor mode");
+                        bail!(
+                            "bond_xmit_hash_policy is only valid with LACP(802.3ad) or balance-xor mode"
+                        );
                     }
                     interface.bond_xmit_hash_policy = config.bond_xmit_hash_policy;
                 }
diff --git a/proxmox-network-api/src/api_types.rs b/proxmox-network-api/src/api_types.rs
index 9f12b029..8dcc2526 100644
--- a/proxmox-network-api/src/api_types.rs
+++ b/proxmox-network-api/src/api_types.rs
@@ -1,19 +1,19 @@
 use std::fmt;
 use std::sync::LazyLock;
 
-use anyhow::{bail, Error};
+use anyhow::{Error, bail};
 use serde::{Deserialize, Serialize};
 
 use regex::Regex;
 
-use proxmox_schema::api;
-use proxmox_schema::api_types::SAFE_ID_REGEX;
-use proxmox_schema::api_types::{CIDR_V4_SCHEMA, CIDR_V6_SCHEMA};
-use proxmox_schema::api_types::{IP_V4_SCHEMA, IP_V6_SCHEMA};
 use proxmox_schema::ApiStringFormat;
 use proxmox_schema::ArraySchema;
 use proxmox_schema::Schema;
 use proxmox_schema::StringSchema;
+use proxmox_schema::api;
+use proxmox_schema::api_types::SAFE_ID_REGEX;
+use proxmox_schema::api_types::{CIDR_V4_SCHEMA, CIDR_V6_SCHEMA};
+use proxmox_schema::api_types::{IP_V4_SCHEMA, IP_V6_SCHEMA};
 
 pub static PHYSICAL_NIC_REGEX: LazyLock<Regex> =
     LazyLock::new(|| Regex::new(r"^(?:eth\d+|en[^:.]+|ib\d+)$").unwrap());
diff --git a/proxmox-network-api/src/config/helper.rs b/proxmox-network-api/src/config/helper.rs
index 9cc23eef..aea5665c 100644
--- a/proxmox-network-api/src/config/helper.rs
+++ b/proxmox-network-api/src/config/helper.rs
@@ -4,10 +4,10 @@ use std::path::Path;
 use std::process::Command;
 use std::sync::LazyLock;
 
-use anyhow::{bail, format_err, Error};
+use anyhow::{Error, bail, format_err};
 use const_format::concatcp;
 use nix::ioctl_read_bad;
-use nix::sys::socket::{socket, AddressFamily, SockFlag, SockType};
+use nix::sys::socket::{AddressFamily, SockFlag, SockType, socket};
 use regex::Regex;
 
 use proxmox_schema::api_types::IPV4RE_STR;
diff --git a/proxmox-network-api/src/config/mod.rs b/proxmox-network-api/src/config/mod.rs
index 054f53c8..752a2165 100644
--- a/proxmox-network-api/src/config/mod.rs
+++ b/proxmox-network-api/src/config/mod.rs
@@ -8,9 +8,9 @@ use std::collections::{BTreeMap, HashMap, HashSet};
 use std::io::Write;
 use std::sync::LazyLock;
 
-use anyhow::{bail, format_err, Error};
+use anyhow::{Error, bail, format_err};
 use regex::Regex;
-use serde::de::{value, Deserialize, IntoDeserializer};
+use serde::de::{Deserialize, IntoDeserializer, value};
 
 use super::{
     BondXmitHashPolicy, Interface, LinuxBondMode, NetworkConfigMethod, NetworkInterfaceType,
@@ -21,7 +21,7 @@ use helper::get_network_interfaces;
 use parser::NetworkParser;
 
 use proxmox_config_digest::ConfigDigest;
-use proxmox_product_config::{open_api_lockfile, replace_system_config, ApiLockGuard};
+use proxmox_product_config::{ApiLockGuard, open_api_lockfile, replace_system_config};
 
 static PHYSICAL_NIC_REGEX: LazyLock<Regex> =
     LazyLock::new(|| Regex::new(r"^(?:eth\d+|en[^:.]+|ib\d+)$").unwrap());
diff --git a/proxmox-network-api/src/config/parser.rs b/proxmox-network-api/src/config/parser.rs
index d05a67b0..200a88c0 100644
--- a/proxmox-network-api/src/config/parser.rs
+++ b/proxmox-network-api/src/config/parser.rs
@@ -5,9 +5,9 @@ use std::io::BufRead;
 use std::iter::{Iterator, Peekable};
 use std::sync::LazyLock;
 
-use anyhow::{bail, format_err, Error};
+use anyhow::{Error, bail, format_err};
 use regex::Regex;
-use serde::de::{value, Deserialize, IntoDeserializer};
+use serde::de::{Deserialize, IntoDeserializer, value};
 
 use super::helper::*;
 use super::lexer::*;
diff --git a/proxmox-notify/src/api/gotify.rs b/proxmox-notify/src/api/gotify.rs
index 27b9c317..5155fd2c 100644
--- a/proxmox-notify/src/api/gotify.rs
+++ b/proxmox-notify/src/api/gotify.rs
@@ -1,11 +1,11 @@
 use proxmox_http_error::HttpError;
 
+use crate::Config;
 use crate::api::http_err;
 use crate::endpoints::gotify::{
-    DeleteableGotifyProperty, GotifyConfig, GotifyConfigUpdater, GotifyPrivateConfig,
-    GotifyPrivateConfigUpdater, GOTIFY_TYPENAME,
+    DeleteableGotifyProperty, GOTIFY_TYPENAME, GotifyConfig, GotifyConfigUpdater,
+    GotifyPrivateConfig, GotifyPrivateConfigUpdater,
 };
-use crate::Config;
 
 /// Get a list of all gotify endpoints.
 ///
@@ -193,15 +193,17 @@ mod tests {
     fn test_update_not_existing_returns_error() -> Result<(), HttpError> {
         let mut config = empty_config();
 
-        assert!(update_endpoint(
-            &mut config,
-            "test",
-            Default::default(),
-            Default::default(),
-            None,
-            None
-        )
-        .is_err());
+        assert!(
+            update_endpoint(
+                &mut config,
+                "test",
+                Default::default(),
+                Default::default(),
+                None,
+                None
+            )
+            .is_err()
+        );
 
         Ok(())
     }
@@ -211,15 +213,17 @@ mod tests {
         let mut config = empty_config();
         add_default_gotify_endpoint(&mut config)?;
 
-        assert!(update_endpoint(
-            &mut config,
-            "gotify-endpoint",
-            Default::default(),
-            Default::default(),
-            None,
-            Some(&[0; 32])
-        )
-        .is_err());
+        assert!(
+            update_endpoint(
+                &mut config,
+                "gotify-endpoint",
+                Default::default(),
+                Default::default(),
+                None,
+                Some(&[0; 32])
+            )
+            .is_err()
+        );
 
         Ok(())
     }
diff --git a/proxmox-notify/src/api/matcher.rs b/proxmox-notify/src/api/matcher.rs
index f5605acb..b2bf15ae 100644
--- a/proxmox-notify/src/api/matcher.rs
+++ b/proxmox-notify/src/api/matcher.rs
@@ -1,10 +1,10 @@
 use proxmox_http_error::HttpError;
 
+use crate::Config;
 use crate::api::http_err;
 use crate::matcher::{
-    DeleteableMatcherProperty, MatcherConfig, MatcherConfigUpdater, MATCHER_TYPENAME,
+    DeleteableMatcherProperty, MATCHER_TYPENAME, MatcherConfig, MatcherConfigUpdater,
 };
-use crate::Config;
 
 /// Get a list of all matchers
 ///
@@ -182,14 +182,16 @@ matcher: matcher2
     #[test]
     fn test_update_invalid_digest_returns_error() -> Result<(), HttpError> {
         let mut config = config_with_two_matchers();
-        assert!(update_matcher(
-            &mut config,
-            "matcher1",
-            Default::default(),
-            None,
-            Some(&[0u8; 32])
-        )
-        .is_err());
+        assert!(
+            update_matcher(
+                &mut config,
+                "matcher1",
+                Default::default(),
+                None,
+                Some(&[0u8; 32])
+            )
+            .is_err()
+        );
 
         Ok(())
     }
diff --git a/proxmox-notify/src/api/sendmail.rs b/proxmox-notify/src/api/sendmail.rs
index e0adb64b..eaafd001 100644
--- a/proxmox-notify/src/api/sendmail.rs
+++ b/proxmox-notify/src/api/sendmail.rs
@@ -1,10 +1,10 @@
 use proxmox_http_error::HttpError;
 
+use crate::Config;
 use crate::api::{http_bail, http_err};
 use crate::endpoints::sendmail::{
-    DeleteableSendmailProperty, SendmailConfig, SendmailConfigUpdater, SENDMAIL_TYPENAME,
+    DeleteableSendmailProperty, SENDMAIL_TYPENAME, SendmailConfig, SendmailConfigUpdater,
 };
-use crate::Config;
 
 /// Get a list of all sendmail endpoints.
 ///
@@ -203,21 +203,23 @@ pub mod tests {
         let mut config = empty_config();
         add_sendmail_endpoint_for_test(&mut config, "sendmail-endpoint")?;
 
-        assert!(update_endpoint(
-            &mut config,
-            "sendmail-endpoint",
-            SendmailConfigUpdater {
-                mailto: Some(vec!["user2@example.com".into(), "user3@example.com".into()]),
-                mailto_user: None,
-                from_address: Some("root@example.com".into()),
-                author: Some("newauthor".into()),
-                comment: Some("new comment".into()),
-                ..Default::default()
-            },
-            None,
-            Some(&[0; 32]),
-        )
-        .is_err());
+        assert!(
+            update_endpoint(
+                &mut config,
+                "sendmail-endpoint",
+                SendmailConfigUpdater {
+                    mailto: Some(vec!["user2@example.com".into(), "user3@example.com".into()]),
+                    mailto_user: None,
+                    from_address: Some("root@example.com".into()),
+                    author: Some("newauthor".into()),
+                    comment: Some("new comment".into()),
+                    ..Default::default()
+                },
+                None,
+                Some(&[0; 32]),
+            )
+            .is_err()
+        );
 
         Ok(())
     }
diff --git a/proxmox-notify/src/api/smtp.rs b/proxmox-notify/src/api/smtp.rs
index 470701bf..41a94581 100644
--- a/proxmox-notify/src/api/smtp.rs
+++ b/proxmox-notify/src/api/smtp.rs
@@ -1,11 +1,11 @@
 use proxmox_http_error::HttpError;
 
+use crate::Config;
 use crate::api::{http_bail, http_err};
 use crate::endpoints::smtp::{
-    DeleteableSmtpProperty, SmtpConfig, SmtpConfigUpdater, SmtpPrivateConfig,
-    SmtpPrivateConfigUpdater, SMTP_TYPENAME,
+    DeleteableSmtpProperty, SMTP_TYPENAME, SmtpConfig, SmtpConfigUpdater, SmtpPrivateConfig,
+    SmtpPrivateConfigUpdater,
 };
-use crate::Config;
 
 /// Get a list of all smtp endpoints.
 ///
@@ -249,15 +249,17 @@ pub mod tests {
     fn test_update_not_existing_returns_error() -> Result<(), HttpError> {
         let mut config = empty_config();
 
-        assert!(update_endpoint(
-            &mut config,
-            "test",
-            Default::default(),
-            Default::default(),
-            None,
-            None,
-        )
-        .is_err());
+        assert!(
+            update_endpoint(
+                &mut config,
+                "test",
+                Default::default(),
+                Default::default(),
+                None,
+                None,
+            )
+            .is_err()
+        );
 
         Ok(())
     }
@@ -267,15 +269,17 @@ pub mod tests {
         let mut config = empty_config();
         add_smtp_endpoint_for_test(&mut config, "sendmail-endpoint")?;
 
-        assert!(update_endpoint(
-            &mut config,
-            "sendmail-endpoint",
-            Default::default(),
-            Default::default(),
-            None,
-            Some(&[0; 32]),
-        )
-        .is_err());
+        assert!(
+            update_endpoint(
+                &mut config,
+                "sendmail-endpoint",
+                Default::default(),
+                Default::default(),
+                None,
+                Some(&[0; 32]),
+            )
+            .is_err()
+        );
 
         Ok(())
     }
diff --git a/proxmox-notify/src/api/webhook.rs b/proxmox-notify/src/api/webhook.rs
index 31c5c869..678d6542 100644
--- a/proxmox-notify/src/api/webhook.rs
+++ b/proxmox-notify/src/api/webhook.rs
@@ -7,10 +7,10 @@ use proxmox_schema::property_string::PropertyString;
 
 use crate::api::http_err;
 use crate::endpoints::webhook::{
-    DeleteableWebhookProperty, KeyAndBase64Val, WebhookConfig, WebhookConfigUpdater,
-    WebhookPrivateConfig, WEBHOOK_TYPENAME,
+    DeleteableWebhookProperty, KeyAndBase64Val, WEBHOOK_TYPENAME, WebhookConfig,
+    WebhookConfigUpdater, WebhookPrivateConfig,
 };
-use crate::{http_bail, Config};
+use crate::{Config, http_bail};
 
 use super::remove_private_config_entry;
 use super::set_private_config_entry;
@@ -303,11 +303,10 @@ mod tests {
                 name: "webhook-endpoint".into(),
                 method: HttpMethod::Post,
                 url: "http://example.com/webhook".into(),
-                header: vec![KeyAndBase64Val::new_with_plain_value(
-                    "Content-Type",
-                    "application/json",
-                )
-                .into()],
+                header: vec![
+                    KeyAndBase64Val::new_with_plain_value("Content-Type", "application/json")
+                        .into(),
+                ],
                 body: Some(encode("this is the body")),
                 comment: Some("comment".into()),
                 disable: Some(false),
@@ -334,14 +333,16 @@ mod tests {
         let mut config = empty_config();
         add_default_webhook_endpoint(&mut config)?;
 
-        assert!(update_endpoint(
-            &mut config,
-            "webhook-endpoint",
-            Default::default(),
-            None,
-            Some(&[0; 32])
-        )
-        .is_err());
+        assert!(
+            update_endpoint(
+                &mut config,
+                "webhook-endpoint",
+                Default::default(),
+                None,
+                Some(&[0; 32])
+            )
+            .is_err()
+        );
 
         Ok(())
     }
diff --git a/proxmox-notify/src/config.rs b/proxmox-notify/src/config.rs
index 791e0b5f..7415a0c0 100644
--- a/proxmox-notify/src/config.rs
+++ b/proxmox-notify/src/config.rs
@@ -5,11 +5,11 @@ use tracing::warn;
 use proxmox_schema::{ApiType, ObjectSchema};
 use proxmox_section_config::{SectionConfig, SectionConfigData, SectionConfigPlugin};
 
-use crate::filter::{FilterConfig, FILTER_TYPENAME};
-use crate::group::{GroupConfig, GROUP_TYPENAME};
-use crate::matcher::{MatcherConfig, MATCHER_TYPENAME};
-use crate::schema::BACKEND_NAME_SCHEMA;
 use crate::Error;
+use crate::filter::{FILTER_TYPENAME, FilterConfig};
+use crate::group::{GROUP_TYPENAME, GroupConfig};
+use crate::matcher::{MATCHER_TYPENAME, MatcherConfig};
+use crate::schema::BACKEND_NAME_SCHEMA;
 
 /// Section config schema for the public config file.
 pub fn config_parser() -> &'static SectionConfig {
@@ -28,7 +28,7 @@ fn config_init() -> SectionConfig {
 
     #[cfg(feature = "sendmail")]
     {
-        use crate::endpoints::sendmail::{SendmailConfig, SENDMAIL_TYPENAME};
+        use crate::endpoints::sendmail::{SENDMAIL_TYPENAME, SendmailConfig};
 
         const SENDMAIL_SCHEMA: &ObjectSchema = SendmailConfig::API_SCHEMA.unwrap_object_schema();
         config.register_plugin(SectionConfigPlugin::new(
@@ -39,7 +39,7 @@ fn config_init() -> SectionConfig {
     }
     #[cfg(feature = "smtp")]
     {
-        use crate::endpoints::smtp::{SmtpConfig, SMTP_TYPENAME};
+        use crate::endpoints::smtp::{SMTP_TYPENAME, SmtpConfig};
 
         const SMTP_SCHEMA: &ObjectSchema = SmtpConfig::API_SCHEMA.unwrap_object_schema();
         config.register_plugin(SectionConfigPlugin::new(
@@ -50,7 +50,7 @@ fn config_init() -> SectionConfig {
     }
     #[cfg(feature = "gotify")]
     {
-        use crate::endpoints::gotify::{GotifyConfig, GOTIFY_TYPENAME};
+        use crate::endpoints::gotify::{GOTIFY_TYPENAME, GotifyConfig};
 
         const GOTIFY_SCHEMA: &ObjectSchema = GotifyConfig::API_SCHEMA.unwrap_object_schema();
         config.register_plugin(SectionConfigPlugin::new(
@@ -61,7 +61,7 @@ fn config_init() -> SectionConfig {
     }
     #[cfg(feature = "webhook")]
     {
-        use crate::endpoints::webhook::{WebhookConfig, WEBHOOK_TYPENAME};
+        use crate::endpoints::webhook::{WEBHOOK_TYPENAME, WebhookConfig};
 
         const WEBHOOK_SCHEMA: &ObjectSchema = WebhookConfig::API_SCHEMA.unwrap_object_schema();
         config.register_plugin(SectionConfigPlugin::new(
@@ -101,7 +101,7 @@ fn private_config_init() -> SectionConfig {
 
     #[cfg(feature = "gotify")]
     {
-        use crate::endpoints::gotify::{GotifyPrivateConfig, GOTIFY_TYPENAME};
+        use crate::endpoints::gotify::{GOTIFY_TYPENAME, GotifyPrivateConfig};
 
         const GOTIFY_SCHEMA: &ObjectSchema = GotifyPrivateConfig::API_SCHEMA.unwrap_object_schema();
         config.register_plugin(SectionConfigPlugin::new(
@@ -113,7 +113,7 @@ fn private_config_init() -> SectionConfig {
 
     #[cfg(feature = "smtp")]
     {
-        use crate::endpoints::smtp::{SmtpPrivateConfig, SMTP_TYPENAME};
+        use crate::endpoints::smtp::{SMTP_TYPENAME, SmtpPrivateConfig};
 
         const SMTP_SCHEMA: &ObjectSchema = SmtpPrivateConfig::API_SCHEMA.unwrap_object_schema();
         config.register_plugin(SectionConfigPlugin::new(
@@ -125,7 +125,7 @@ fn private_config_init() -> SectionConfig {
 
     #[cfg(feature = "webhook")]
     {
-        use crate::endpoints::webhook::{WebhookPrivateConfig, WEBHOOK_TYPENAME};
+        use crate::endpoints::webhook::{WEBHOOK_TYPENAME, WebhookPrivateConfig};
 
         const WEBHOOK_SCHEMA: &ObjectSchema =
             WebhookPrivateConfig::API_SCHEMA.unwrap_object_schema();
diff --git a/proxmox-notify/src/context/pbs.rs b/proxmox-notify/src/context/pbs.rs
index e8106c57..ab360cc4 100644
--- a/proxmox-notify/src/context/pbs.rs
+++ b/proxmox-notify/src/context/pbs.rs
@@ -6,8 +6,8 @@ use tracing::error;
 use proxmox_schema::{ObjectSchema, Schema, StringSchema};
 use proxmox_section_config::{SectionConfig, SectionConfigPlugin};
 
-use crate::context::{common, Context};
 use crate::Error;
+use crate::context::{Context, common};
 
 const PBS_USER_CFG_FILENAME: &str = "/etc/proxmox-backup/user.cfg";
 const PBS_NODE_CFG_FILENAME: &str = "/etc/proxmox-backup/node.cfg";
diff --git a/proxmox-notify/src/context/pve.rs b/proxmox-notify/src/context/pve.rs
index d49ab27c..6025ef0b 100644
--- a/proxmox-notify/src/context/pve.rs
+++ b/proxmox-notify/src/context/pve.rs
@@ -1,5 +1,5 @@
-use crate::context::{common, Context};
 use crate::Error;
+use crate::context::{Context, common};
 use std::path::Path;
 
 fn lookup_mail_address(content: &str, user: &str) -> Option<String> {
diff --git a/proxmox-notify/src/context/test.rs b/proxmox-notify/src/context/test.rs
index 5df25d05..d1e5ef9d 100644
--- a/proxmox-notify/src/context/test.rs
+++ b/proxmox-notify/src/context/test.rs
@@ -1,5 +1,5 @@
-use crate::context::Context;
 use crate::Error;
+use crate::context::Context;
 
 #[derive(Debug)]
 pub struct TestContext;
diff --git a/proxmox-notify/src/endpoints/gotify.rs b/proxmox-notify/src/endpoints/gotify.rs
index 3e977131..94b74ef6 100644
--- a/proxmox-notify/src/endpoints/gotify.rs
+++ b/proxmox-notify/src/endpoints/gotify.rs
@@ -7,12 +7,12 @@ use serde_json::json;
 use proxmox_http::client::sync::Client;
 use proxmox_http::{HttpClient, HttpOptions, ProxyConfig};
 use proxmox_schema::api_types::COMMENT_SCHEMA;
-use proxmox_schema::{api, Updater};
+use proxmox_schema::{Updater, api};
 
 use crate::context::context;
 use crate::renderer::TemplateType;
 use crate::schema::ENTITY_NAME_SCHEMA;
-use crate::{renderer, Content, Endpoint, Error, Notification, Origin, Severity};
+use crate::{Content, Endpoint, Error, Notification, Origin, Severity, renderer};
 
 const HTTP_TIMEOUT: Duration = Duration::from_secs(10);
 
diff --git a/proxmox-notify/src/endpoints/sendmail.rs b/proxmox-notify/src/endpoints/sendmail.rs
index 70b0f111..4f26a121 100644
--- a/proxmox-notify/src/endpoints/sendmail.rs
+++ b/proxmox-notify/src/endpoints/sendmail.rs
@@ -2,13 +2,13 @@ use proxmox_sendmail::Mail;
 use serde::{Deserialize, Serialize};
 
 use proxmox_schema::api_types::COMMENT_SCHEMA;
-use proxmox_schema::{api, Updater};
+use proxmox_schema::{Updater, api};
 
 use crate::context;
 use crate::endpoints::common::mail;
 use crate::renderer::TemplateType;
 use crate::schema::{EMAIL_SCHEMA, ENTITY_NAME_SCHEMA, USER_SCHEMA};
-use crate::{renderer, Content, Endpoint, Error, Notification, Origin};
+use crate::{Content, Endpoint, Error, Notification, Origin, renderer};
 
 pub(crate) const SENDMAIL_TYPENAME: &str = "sendmail";
 
diff --git a/proxmox-notify/src/endpoints/smtp.rs b/proxmox-notify/src/endpoints/smtp.rs
index 4521e04a..7b00deb3 100644
--- a/proxmox-notify/src/endpoints/smtp.rs
+++ b/proxmox-notify/src/endpoints/smtp.rs
@@ -3,17 +3,17 @@ use std::time::Duration;
 use lettre::message::header::{HeaderName, HeaderValue};
 use lettre::message::{Mailbox, MultiPart, SinglePart};
 use lettre::transport::smtp::client::{Tls, TlsParameters};
-use lettre::{message::header::ContentType, Message, SmtpTransport, Transport};
+use lettre::{Message, SmtpTransport, Transport, message::header::ContentType};
 use serde::{Deserialize, Serialize};
 
 use proxmox_schema::api_types::COMMENT_SCHEMA;
-use proxmox_schema::{api, Updater};
+use proxmox_schema::{Updater, api};
 
 use crate::context::context;
 use crate::endpoints::common::mail;
 use crate::renderer::TemplateType;
 use crate::schema::{EMAIL_SCHEMA, ENTITY_NAME_SCHEMA, USER_SCHEMA};
-use crate::{renderer, Content, Endpoint, Error, Notification, Origin};
+use crate::{Content, Endpoint, Error, Notification, Origin, renderer};
 
 pub(crate) const SMTP_TYPENAME: &str = "smtp";
 
@@ -252,8 +252,8 @@ impl Endpoint for SmtpEndpoint {
             }
             #[cfg(feature = "mail-forwarder")]
             Content::ForwardedMail { raw, title, .. } => {
-                use lettre::message::header::ContentTransferEncoding;
                 use lettre::message::Body;
+                use lettre::message::header::ContentTransferEncoding;
                 use tracing::error;
 
                 let parsed_message = mail_parser::Message::parse(raw)
diff --git a/proxmox-notify/src/endpoints/webhook.rs b/proxmox-notify/src/endpoints/webhook.rs
index 34dbac54..165d84de 100644
--- a/proxmox-notify/src/endpoints/webhook.rs
+++ b/proxmox-notify/src/endpoints/webhook.rs
@@ -17,17 +17,17 @@ use http::Request;
 use percent_encoding::AsciiSet;
 use proxmox_schema::property_string::PropertyString;
 use serde::{Deserialize, Serialize};
-use serde_json::{json, Map, Value};
+use serde_json::{Map, Value, json};
 
 use proxmox_http::client::sync::Client;
 use proxmox_http::{HttpClient, HttpOptions, ProxyConfig};
 use proxmox_schema::api_types::{COMMENT_SCHEMA, HTTP_URL_SCHEMA};
-use proxmox_schema::{api, ApiStringFormat, ApiType, Schema, StringSchema, Updater};
+use proxmox_schema::{ApiStringFormat, ApiType, Schema, StringSchema, Updater, api};
 
 use crate::context::context;
 use crate::renderer::TemplateType;
 use crate::schema::ENTITY_NAME_SCHEMA;
-use crate::{renderer, Content, Endpoint, Error, Notification, Origin};
+use crate::{Content, Endpoint, Error, Notification, Origin, renderer};
 
 /// This will be used as a section type in the public/private configuration file.
 pub(crate) const WEBHOOK_TYPENAME: &str = "webhook";
diff --git a/proxmox-notify/src/lib.rs b/proxmox-notify/src/lib.rs
index 12e59474..638d34d9 100644
--- a/proxmox-notify/src/lib.rs
+++ b/proxmox-notify/src/lib.rs
@@ -7,8 +7,8 @@ use std::str::FromStr;
 
 use context::context;
 use serde::{Deserialize, Serialize};
-use serde_json::json;
 use serde_json::Value;
+use serde_json::json;
 use tracing::{error, info};
 
 use proxmox_schema::api;
@@ -16,7 +16,7 @@ use proxmox_section_config::SectionConfigData;
 use proxmox_uuid::Uuid;
 
 pub mod matcher;
-use matcher::{MatcherConfig, MATCHER_TYPENAME};
+use matcher::{MATCHER_TYPENAME, MatcherConfig};
 
 pub mod api;
 pub mod config;
diff --git a/proxmox-notify/src/matcher.rs b/proxmox-notify/src/matcher.rs
index 083c2dbd..9964e4bf 100644
--- a/proxmox-notify/src/matcher.rs
+++ b/proxmox-notify/src/matcher.rs
@@ -9,8 +9,8 @@ use serde::{Deserialize, Serialize};
 use tracing::{error, info};
 
 use proxmox_schema::api_types::{COMMENT_SCHEMA, SAFE_ID_REGEX_STR};
-use proxmox_schema::{api, const_regex, ApiStringFormat, Schema, StringSchema, Updater};
-use proxmox_time::{parse_daily_duration, DailyDuration};
+use proxmox_schema::{ApiStringFormat, Schema, StringSchema, Updater, api, const_regex};
+use proxmox_time::{DailyDuration, parse_daily_duration};
 
 use crate::schema::ENTITY_NAME_SCHEMA;
 use crate::{Error, Notification, Origin, Severity};
diff --git a/proxmox-notify/src/renderer/mod.rs b/proxmox-notify/src/renderer/mod.rs
index e058ea22..8be6f057 100644
--- a/proxmox-notify/src/renderer/mod.rs
+++ b/proxmox-notify/src/renderer/mod.rs
@@ -13,7 +13,7 @@ use tracing::error;
 use proxmox_human_byte::HumanByte;
 use proxmox_time::TimeSpan;
 
-use crate::{context, Error};
+use crate::{Error, context};
 
 mod html;
 mod plaintext;
diff --git a/proxmox-openid/src/auth_state.rs b/proxmox-openid/src/auth_state.rs
index f2a299a0..a5ac71cd 100644
--- a/proxmox-openid/src/auth_state.rs
+++ b/proxmox-openid/src/auth_state.rs
@@ -1,9 +1,9 @@
 use std::path::{Path, PathBuf};
 
-use anyhow::{bail, Error};
-use serde_json::{json, Value};
+use anyhow::{Error, bail};
+use serde_json::{Value, json};
 
-use proxmox_sys::fs::{file_get_json, open_file_locked, replace_file, CreateOptions};
+use proxmox_sys::fs::{CreateOptions, file_get_json, open_file_locked, replace_file};
 use proxmox_time::epoch_i64;
 
 use super::{PrivateAuthState, PublicAuthState};
diff --git a/proxmox-openid/src/http_client.rs b/proxmox-openid/src/http_client.rs
index 1850d64e..10d649d0 100644
--- a/proxmox-openid/src/http_client.rs
+++ b/proxmox-openid/src/http_client.rs
@@ -1,7 +1,7 @@
 use std::env;
 use std::sync::Arc;
 
-use http::header::{HeaderMap, HeaderValue, CONTENT_TYPE};
+use http::header::{CONTENT_TYPE, HeaderMap, HeaderValue};
 use http::method::Method;
 use http::status::StatusCode;
 
diff --git a/proxmox-openid/src/lib.rs b/proxmox-openid/src/lib.rs
index fe65fded..4683eed3 100644
--- a/proxmox-openid/src/lib.rs
+++ b/proxmox-openid/src/lib.rs
@@ -2,7 +2,7 @@
 
 use std::path::Path;
 
-use anyhow::{format_err, Error};
+use anyhow::{Error, format_err};
 use serde::{Deserialize, Serialize};
 use serde_json::Value;
 
@@ -13,11 +13,6 @@ mod auth_state;
 pub use auth_state::*;
 
 use openidconnect::{
-    //curl::http_client,
-    core::{
-        CoreAuthDisplay, CoreAuthPrompt, CoreAuthenticationFlow, CoreClient, CoreGenderClaim,
-        CoreIdTokenClaims, CoreIdTokenVerifier, CoreProviderMetadata,
-    },
     AdditionalClaims,
     AuthenticationContextClass,
     AuthorizationCode,
@@ -32,6 +27,11 @@ use openidconnect::{
     RedirectUrl,
     Scope,
     UserInfoClaims,
+    //curl::http_client,
+    core::{
+        CoreAuthDisplay, CoreAuthPrompt, CoreAuthenticationFlow, CoreClient, CoreGenderClaim,
+        CoreIdTokenClaims, CoreIdTokenVerifier, CoreProviderMetadata,
+    },
 };
 
 /// Stores Additional Claims into a serde_json::Value;
diff --git a/proxmox-rest-server/examples/minimal-rest-server.rs b/proxmox-rest-server/examples/minimal-rest-server.rs
index d6a5f2eb..0bed3f05 100644
--- a/proxmox-rest-server/examples/minimal-rest-server.rs
+++ b/proxmox-rest-server/examples/minimal-rest-server.rs
@@ -3,13 +3,13 @@ use std::future::Future;
 use std::pin::Pin;
 use std::sync::{LazyLock, Mutex};
 
-use anyhow::{bail, format_err, Error};
-use http::request::Parts;
+use anyhow::{Error, bail, format_err};
 use http::HeaderMap;
+use http::request::Parts;
 use hyper::{Body, Method, Response};
 
 use proxmox_router::{
-    list_subdirs_api_method, Router, RpcEnvironmentType, SubdirMap, UserInformation,
+    Router, RpcEnvironmentType, SubdirMap, UserInformation, list_subdirs_api_method,
 };
 use proxmox_schema::api;
 
diff --git a/proxmox-rest-server/src/api_config.rs b/proxmox-rest-server/src/api_config.rs
index 7dbcad52..0765b517 100644
--- a/proxmox-rest-server/src/api_config.rs
+++ b/proxmox-rest-server/src/api_config.rs
@@ -6,7 +6,7 @@ use std::pin::Pin;
 use std::sync::{Arc, Mutex};
 use std::task::{Context, Poll};
 
-use anyhow::{format_err, Error};
+use anyhow::{Error, format_err};
 use http::{HeaderMap, Method, Uri};
 use hyper::http::request::Parts;
 use hyper::{Body, Response};
@@ -15,10 +15,10 @@ use tower_service::Service;
 use proxmox_daemon::command_socket::CommandSocket;
 use proxmox_log::{FileLogOptions, FileLogger};
 use proxmox_router::{Router, RpcEnvironmentType, UserInformation};
-use proxmox_sys::fs::{create_path, CreateOptions};
+use proxmox_sys::fs::{CreateOptions, create_path};
 
-use crate::rest::Handler;
 use crate::RestEnvironment;
+use crate::rest::Handler;
 
 /// REST server configuration
 pub struct ApiConfig {
@@ -324,7 +324,7 @@ mod templates {
     use std::sync::RwLock;
     use std::time::SystemTime;
 
-    use anyhow::{bail, format_err, Error};
+    use anyhow::{Error, bail, format_err};
     use handlebars::Handlebars;
     use serde::Serialize;
 
diff --git a/proxmox-rest-server/src/compression.rs b/proxmox-rest-server/src/compression.rs
index 189d7041..f8d25e34 100644
--- a/proxmox-rest-server/src/compression.rs
+++ b/proxmox-rest-server/src/compression.rs
@@ -1,4 +1,4 @@
-use anyhow::{bail, Error};
+use anyhow::{Error, bail};
 use hyper::header;
 
 /// Possible Compression Methods, order determines preference (later is preferred)
diff --git a/proxmox-rest-server/src/connection.rs b/proxmox-rest-server/src/connection.rs
index 526555ae..1877a3a2 100644
--- a/proxmox-rest-server/src/connection.rs
+++ b/proxmox-rest-server/src/connection.rs
@@ -8,11 +8,11 @@ use std::net::SocketAddr;
 use std::os::fd::FromRawFd;
 use std::os::unix::io::AsRawFd;
 use std::path::PathBuf;
-use std::pin::{pin, Pin};
+use std::pin::{Pin, pin};
 use std::sync::{Arc, Mutex};
 use std::time::Duration;
 
-use anyhow::{format_err, Context, Error};
+use anyhow::{Context, Error, format_err};
 use futures::FutureExt;
 use hyper::server::accept;
 use openssl::ec::{EcGroup, EcKey};
@@ -357,7 +357,7 @@ impl AcceptBuilder {
         let (socket, peer) = match listener.accept().await {
             Ok(connection) => connection,
             Err(error) => {
-                return Err(format_err!(error)).context("error while accepting tcp stream")
+                return Err(format_err!(error)).context("error while accepting tcp stream");
             }
         };
 
@@ -461,7 +461,9 @@ impl AcceptBuilder {
                 let insecure_stream = Box::pin(state.socket);
 
                 if let Err(send_err) = insecure_sender.send(Ok(insecure_stream)).await {
-                    log::error!("[{peer}] failed to accept connection - connection channel closed: {send_err}");
+                    log::error!(
+                        "[{peer}] failed to accept connection - connection channel closed: {send_err}"
+                    );
                 }
             }
             Err(err) => {
diff --git a/proxmox-rest-server/src/environment.rs b/proxmox-rest-server/src/environment.rs
index ca41bb50..81559a4b 100644
--- a/proxmox-rest-server/src/environment.rs
+++ b/proxmox-rest-server/src/environment.rs
@@ -1,7 +1,7 @@
 use std::net::SocketAddr;
 use std::sync::Arc;
 
-use serde_json::{json, Value};
+use serde_json::{Value, json};
 
 use proxmox_router::{RpcEnvironment, RpcEnvironmentType};
 
diff --git a/proxmox-rest-server/src/formatter.rs b/proxmox-rest-server/src/formatter.rs
index 32ca9936..7bbec86d 100644
--- a/proxmox-rest-server/src/formatter.rs
+++ b/proxmox-rest-server/src/formatter.rs
@@ -2,7 +2,7 @@
 use std::collections::HashMap;
 
 use anyhow::Error;
-use serde_json::{json, Value};
+use serde_json::{Value, json};
 
 use hyper::header;
 use hyper::{Body, Response, StatusCode};
diff --git a/proxmox-rest-server/src/h2service.rs b/proxmox-rest-server/src/h2service.rs
index db6e3b0a..efe02049 100644
--- a/proxmox-rest-server/src/h2service.rs
+++ b/proxmox-rest-server/src/h2service.rs
@@ -12,7 +12,7 @@ use proxmox_router::http_err;
 use proxmox_router::{ApiResponseFuture, HttpError, Router, RpcEnvironment};
 
 use crate::formatter::*;
-use crate::{normalize_path_with_components, WorkerTask};
+use crate::{WorkerTask, normalize_path_with_components};
 
 /// Hyper Service implementation to handle stateful H2 connections.
 ///
diff --git a/proxmox-rest-server/src/lib.rs b/proxmox-rest-server/src/lib.rs
index 43dafa91..38c0d96f 100644
--- a/proxmox-rest-server/src/lib.rs
+++ b/proxmox-rest-server/src/lib.rs
@@ -19,7 +19,7 @@
 use std::fmt;
 use std::sync::LazyLock;
 
-use anyhow::{format_err, Error};
+use anyhow::{Error, format_err};
 use nix::unistd::Pid;
 
 use proxmox_sys::fs::CreateOptions;
diff --git a/proxmox-rest-server/src/rest.rs b/proxmox-rest-server/src/rest.rs
index c11a9b0c..848fbc3a 100644
--- a/proxmox-rest-server/src/rest.rs
+++ b/proxmox-rest-server/src/rest.rs
@@ -7,7 +7,7 @@ use std::pin::Pin;
 use std::sync::{Arc, LazyLock, Mutex};
 use std::task::{Context, Poll};
 
-use anyhow::{bail, format_err, Error};
+use anyhow::{Error, bail, format_err};
 use futures::future::FutureExt;
 use futures::stream::TryStreamExt;
 use hyper::body::HttpBody;
@@ -22,8 +22,8 @@ use tower_service::Service;
 use url::form_urlencoded;
 
 use proxmox_router::{
-    check_api_permission, ApiHandler, ApiMethod, HttpError, Permission, RpcEnvironment,
-    RpcEnvironmentType, UserInformation,
+    ApiHandler, ApiMethod, HttpError, Permission, RpcEnvironment, RpcEnvironmentType,
+    UserInformation, check_api_permission,
 };
 use proxmox_router::{http_bail, http_err};
 use proxmox_schema::{ObjectSchemaType, ParameterSchema};
@@ -33,7 +33,7 @@ use proxmox_compression::DeflateEncoder;
 use proxmox_log::FileLogger;
 
 use crate::{
-    formatter::*, normalize_path, ApiConfig, AuthError, CompressionMethod, RestEnvironment,
+    ApiConfig, AuthError, CompressionMethod, RestEnvironment, formatter::*, normalize_path,
 };
 
 unsafe extern "C" {
diff --git a/proxmox-rest-server/src/worker_task.rs b/proxmox-rest-server/src/worker_task.rs
index 24e2676e..6f0fcab2 100644
--- a/proxmox-rest-server/src/worker_task.rs
+++ b/proxmox-rest-server/src/worker_task.rs
@@ -7,11 +7,11 @@ use std::sync::atomic::{AtomicBool, AtomicUsize, Ordering};
 use std::sync::{Arc, LazyLock, Mutex, OnceLock};
 use std::time::{Duration, SystemTime};
 
-use anyhow::{bail, format_err, Error};
+use anyhow::{Error, bail, format_err};
 use futures::*;
 use nix::fcntl::OFlag;
 use serde::{Deserialize, Serialize};
-use serde_json::{json, Value};
+use serde_json::{Value, json};
 use tokio::signal::unix::SignalKind;
 use tokio::sync::{oneshot, watch};
 use tracing::{info, warn};
@@ -20,7 +20,7 @@ use proxmox_daemon::command_socket::CommandSocket;
 use proxmox_lang::try_block;
 use proxmox_log::{FileLogOptions, FileLogger, LogContext};
 use proxmox_schema::upid::UPID;
-use proxmox_sys::fs::{atomic_open_or_create_file, create_path, replace_file, CreateOptions};
+use proxmox_sys::fs::{CreateOptions, atomic_open_or_create_file, create_path, replace_file};
 use proxmox_sys::linux::procfs;
 use proxmox_sys::logrotate::{LogRotate, LogRotateFiles};
 use proxmox_worker_task::WorkerTaskContext;
diff --git a/proxmox-router/src/cli/command.rs b/proxmox-router/src/cli/command.rs
index aa99d528..797687db 100644
--- a/proxmox-router/src/cli/command.rs
+++ b/proxmox-router/src/cli/command.rs
@@ -1,7 +1,7 @@
 use std::cell::RefCell;
 use std::sync::Arc;
 
-use anyhow::{bail, format_err, Error};
+use anyhow::{Error, bail, format_err};
 use serde::{Deserialize, Serialize};
 use serde_json::Value;
 
@@ -11,8 +11,8 @@ use proxmox_schema::*;
 use super::environment::CliEnvironment;
 use super::getopts;
 use super::{
-    generate_nested_usage, generate_usage_str_do, print_help, print_nested_usage_error,
-    print_simple_usage_error_do, CliCommand, CliCommandMap, CommandLineInterface, GlobalOptions,
+    CliCommand, CliCommandMap, CommandLineInterface, GlobalOptions, generate_nested_usage,
+    generate_usage_str_do, print_help, print_nested_usage_error, print_simple_usage_error_do,
 };
 use crate::{ApiFuture, ApiHandler, ApiMethod, RpcEnvironment};
 
diff --git a/proxmox-router/src/cli/completion.rs b/proxmox-router/src/cli/completion.rs
index 5a899eec..340be153 100644
--- a/proxmox-router/src/cli/completion.rs
+++ b/proxmox-router/src/cli/completion.rs
@@ -4,7 +4,7 @@ use proxmox_schema::*;
 
 use super::help_command_def;
 use super::{
-    shellword_split_unclosed, CliCommand, CliCommandMap, CommandLineInterface, CompletionFunction,
+    CliCommand, CliCommandMap, CommandLineInterface, CompletionFunction, shellword_split_unclosed,
 };
 
 fn record_done_argument(
diff --git a/proxmox-router/src/cli/completion_helpers.rs b/proxmox-router/src/cli/completion_helpers.rs
index 0e8d178f..3c53c8e3 100644
--- a/proxmox-router/src/cli/completion_helpers.rs
+++ b/proxmox-router/src/cli/completion_helpers.rs
@@ -3,7 +3,7 @@ use std::path::PathBuf;
 
 use nix::dir::Dir;
 use nix::fcntl::{AtFlags, OFlag};
-use nix::sys::stat::{fstatat, Mode};
+use nix::sys::stat::{Mode, fstatat};
 
 pub fn complete_file_name(arg: &str, _param: &HashMap<String, String>) -> Vec<String> {
     let mut result = vec![];
diff --git a/proxmox-router/src/cli/format.rs b/proxmox-router/src/cli/format.rs
index 95448aa9..adeaf571 100644
--- a/proxmox-router/src/cli/format.rs
+++ b/proxmox-router/src/cli/format.rs
@@ -2,17 +2,17 @@
 
 use std::collections::{HashMap, HashSet};
 
-use anyhow::{bail, Error};
+use anyhow::{Error, bail};
 use serde::Serialize;
 use serde_json::Value;
 
 use proxmox_schema::format::{
-    get_property_description, get_schema_type_text, DocumentationFormat, ParameterDisplayStyle,
+    DocumentationFormat, ParameterDisplayStyle, get_property_description, get_schema_type_text,
 };
 use proxmox_schema::*;
 
-use super::{value_to_text, TableFormatOptions};
 use super::{CliCommand, CliCommandMap, CommandLineInterface, GlobalOptions};
+use super::{TableFormatOptions, value_to_text};
 
 /// Helper function to format and print result.
 ///
diff --git a/proxmox-router/src/cli/mod.rs b/proxmox-router/src/cli/mod.rs
index 2393da31..7060bcba 100644
--- a/proxmox-router/src/cli/mod.rs
+++ b/proxmox-router/src/cli/mod.rs
@@ -17,7 +17,7 @@ use std::collections::HashMap;
 use std::io::{self, Write};
 use std::sync::Arc;
 
-use anyhow::{bail, format_err, Error};
+use anyhow::{Error, bail, format_err};
 use serde::Deserialize;
 use serde_json::Value;
 
diff --git a/proxmox-router/src/cli/shellword.rs b/proxmox-router/src/cli/shellword.rs
index dd7584f0..68493f66 100644
--- a/proxmox-router/src/cli/shellword.rs
+++ b/proxmox-router/src/cli/shellword.rs
@@ -1,4 +1,4 @@
-use anyhow::{bail, Error};
+use anyhow::{Error, bail};
 
 /// Shell quote type
 pub use rustyline::completion::Quote;
diff --git a/proxmox-router/src/cli/text_table.rs b/proxmox-router/src/cli/text_table.rs
index 34173b4d..40b76d9f 100644
--- a/proxmox-router/src/cli/text_table.rs
+++ b/proxmox-router/src/cli/text_table.rs
@@ -1,6 +1,6 @@
 use std::io::{IsTerminal, Write};
 
-use anyhow::{bail, format_err, Error};
+use anyhow::{Error, bail, format_err};
 use serde_json::Value;
 use unicode_width::UnicodeWidthStr;
 
diff --git a/proxmox-router/src/error.rs b/proxmox-router/src/error.rs
index 15c5417f..69955507 100644
--- a/proxmox-router/src/error.rs
+++ b/proxmox-router/src/error.rs
@@ -1,4 +1,4 @@
-pub use proxmox_http_error::{http_bail, http_err, HttpError};
+pub use proxmox_http_error::{HttpError, http_bail, http_err};
 
 #[doc(hidden)]
 pub use http::StatusCode;
diff --git a/proxmox-router/src/format.rs b/proxmox-router/src/format.rs
index 67568af0..4eabb9e3 100644
--- a/proxmox-router/src/format.rs
+++ b/proxmox-router/src/format.rs
@@ -4,8 +4,8 @@ use std::io::Write;
 
 use anyhow::Error;
 
-use proxmox_schema::format::*;
 use proxmox_schema::ObjectSchemaType;
+use proxmox_schema::format::*;
 
 #[cfg(feature = "server")]
 use crate::ApiHandler;
diff --git a/proxmox-router/src/permission.rs b/proxmox-router/src/permission.rs
index f6388d64..102f6d94 100644
--- a/proxmox-router/src/permission.rs
+++ b/proxmox-router/src/permission.rs
@@ -200,7 +200,7 @@ fn check_api_permission_tail(
 
 #[cfg(test)]
 mod test {
-    use serde_json::{json, Value};
+    use serde_json::{Value, json};
 
     use crate::permission::*;
 
diff --git a/proxmox-router/src/router.rs b/proxmox-router/src/router.rs
index 33b598da..cc38d9d5 100644
--- a/proxmox-router/src/router.rs
+++ b/proxmox-router/src/router.rs
@@ -42,10 +42,12 @@ use crate::SerializableReturn;
 ///    &ObjectSchema::new("Hello World Example", &[])
 /// );
 /// ```
-pub type ApiHandlerFn = &'static (dyn Fn(Value, &ApiMethod, &mut dyn RpcEnvironment) -> Result<Value, Error>
-              + Send
-              + Sync
-              + 'static);
+pub type ApiHandlerFn = &'static (
+             dyn Fn(Value, &ApiMethod, &mut dyn RpcEnvironment) -> Result<Value, Error>
+                 + Send
+                 + Sync
+                 + 'static
+         );
 
 /// A synchronous API handler gets a json Value as input and returns a serializable return value as output.
 ///
@@ -69,14 +71,16 @@ pub type ApiHandlerFn = &'static (dyn Fn(Value, &ApiMethod, &mut dyn RpcEnvironm
 ///    &ObjectSchema::new("Hello World Example", &[])
 /// );
 /// ```
-pub type SerializingApiHandlerFn = &'static (dyn Fn(
+pub type SerializingApiHandlerFn = &'static (
+             dyn Fn(
     Value,
     &ApiMethod,
     &mut dyn RpcEnvironment,
 ) -> Result<Box<dyn SerializableReturn + Send>, Error>
-              + Send
-              + Sync
-              + 'static);
+                 + Send
+                 + Sync
+                 + 'static
+         );
 
 /// A record for a streaming API call. This contains a `Result<Value, Error>` and allows formatting
 /// as a `json-seq` formatted string.
@@ -181,10 +185,12 @@ where
 ///    &ObjectSchema::new("Hello World Example", &[])
 /// );
 /// ```
-pub type StreamApiHandlerFn = &'static (dyn Fn(Value, &ApiMethod, &mut dyn RpcEnvironment) -> Result<SyncStream, Error>
-              + Send
-              + Sync
-              + 'static);
+pub type StreamApiHandlerFn = &'static (
+             dyn Fn(Value, &ApiMethod, &mut dyn RpcEnvironment) -> Result<SyncStream, Error>
+                 + Send
+                 + Sync
+                 + 'static
+         );
 
 pub struct SyncStream {
     inner: Box<dyn Iterator<Item = Record> + Send>,
@@ -244,9 +250,11 @@ where
 ///    &ObjectSchema::new("Hello World Example (async)", &[])
 /// );
 /// ```
-pub type ApiAsyncHandlerFn = &'static (dyn for<'a> Fn(Value, &'static ApiMethod, &'a mut dyn RpcEnvironment) -> ApiFuture<'a>
-              + Send
-              + Sync);
+pub type ApiAsyncHandlerFn = &'static (
+             dyn for<'a> Fn(Value, &'static ApiMethod, &'a mut dyn RpcEnvironment) -> ApiFuture<'a>
+                 + Send
+                 + Sync
+         );
 
 pub type ApiFuture<'a> = Pin<Box<dyn Future<Output = Result<Value, anyhow::Error>> + Send + 'a>>;
 
@@ -276,13 +284,15 @@ pub type ApiFuture<'a> = Pin<Box<dyn Future<Output = Result<Value, anyhow::Error
 ///    &ObjectSchema::new("Hello World Example (async)", &[])
 /// );
 /// ```
-pub type SerializingApiAsyncHandlerFn = &'static (dyn for<'a> Fn(
+pub type SerializingApiAsyncHandlerFn = &'static (
+             dyn for<'a> Fn(
     Value,
     &'static ApiMethod,
     &'a mut dyn RpcEnvironment,
 ) -> SerializingApiFuture<'a>
-              + Send
-              + Sync);
+                 + Send
+                 + Sync
+         );
 
 pub type SerializingApiFuture<'a> = Pin<
     Box<dyn Future<Output = Result<Box<dyn SerializableReturn + Send>, anyhow::Error>> + Send + 'a>,
@@ -319,13 +329,15 @@ pub type SerializingApiFuture<'a> = Pin<
 ///    &ObjectSchema::new("Hello World Example (async)", &[])
 /// );
 /// ```
-pub type StreamApiAsyncHandlerFn = &'static (dyn for<'a> Fn(
+pub type StreamApiAsyncHandlerFn = &'static (
+             dyn for<'a> Fn(
     Value,
     &'static ApiMethod,
     &'a mut dyn RpcEnvironment,
 ) -> StreamApiFuture<'a>
-              + Send
-              + Sync);
+                 + Send
+                 + Sync
+         );
 
 pub type StreamApiFuture<'a> =
     Pin<Box<dyn Future<Output = Result<Stream, anyhow::Error>> + Send + 'a>>;
@@ -419,16 +431,18 @@ impl IntoRecord for Result<Record, Error> {
 /// );
 /// ```
 #[cfg(feature = "server")]
-pub type ApiAsyncHttpHandlerFn = &'static (dyn Fn(
+pub type ApiAsyncHttpHandlerFn = &'static (
+             dyn Fn(
     Parts,
     Body,
     Value,
     &'static ApiMethod,
     Box<dyn RpcEnvironment>,
 ) -> ApiResponseFuture
-              + Send
-              + Sync
-              + 'static);
+                 + Send
+                 + Sync
+                 + 'static
+         );
 
 /// The output of an asynchronous API handler is a future yielding a `Response`.
 #[cfg(feature = "server")]
diff --git a/proxmox-router/src/stream/parsing.rs b/proxmox-router/src/stream/parsing.rs
index 782c18a6..236edb2a 100644
--- a/proxmox-router/src/stream/parsing.rs
+++ b/proxmox-router/src/stream/parsing.rs
@@ -1,9 +1,9 @@
 use std::future::Future;
 use std::io;
 use std::pin::Pin;
-use std::task::{ready, Poll};
+use std::task::{Poll, ready};
 
-use anyhow::{format_err, Context as _, Error};
+use anyhow::{Context as _, Error, format_err};
 use futures::io::{AsyncBufRead, AsyncBufReadExt, AsyncRead, BufReader};
 use hyper::body::{Body, Bytes};
 use serde::Deserialize;
diff --git a/proxmox-rrd/examples/prrd.rs b/proxmox-rrd/examples/prrd.rs
index c2a3789b..859fe981 100644
--- a/proxmox-rrd/examples/prrd.rs
+++ b/proxmox-rrd/examples/prrd.rs
@@ -2,15 +2,15 @@
 
 use std::path::PathBuf;
 
-use anyhow::{bail, Error};
+use anyhow::{Error, bail};
 use serde::{Deserialize, Serialize};
 use serde_json::json;
 
-use proxmox_router::cli::{
-    complete_file_name, run_cli_command, CliCommand, CliCommandMap, CliEnvironment,
-};
 use proxmox_router::RpcEnvironment;
-use proxmox_schema::{api, ApiStringFormat, ApiType, IntegerSchema, Schema, StringSchema};
+use proxmox_router::cli::{
+    CliCommand, CliCommandMap, CliEnvironment, complete_file_name, run_cli_command,
+};
+use proxmox_schema::{ApiStringFormat, ApiType, IntegerSchema, Schema, StringSchema, api};
 
 use proxmox_sys::fs::CreateOptions;
 
diff --git a/proxmox-rrd/src/cache.rs b/proxmox-rrd/src/cache.rs
index 9dd85a16..e1c574c8 100644
--- a/proxmox-rrd/src/cache.rs
+++ b/proxmox-rrd/src/cache.rs
@@ -7,13 +7,13 @@ use std::sync::{Arc, RwLock};
 use std::thread::spawn;
 use std::time::SystemTime;
 
-use anyhow::{bail, format_err, Error};
-use crossbeam_channel::{bounded, TryRecvError};
+use anyhow::{Error, bail, format_err};
+use crossbeam_channel::{TryRecvError, bounded};
 
-use proxmox_sys::fs::{create_path, CreateOptions};
+use proxmox_sys::fs::{CreateOptions, create_path};
 
-use crate::rrd::{AggregationFn, DataSourceType, Database};
 use crate::Entry;
+use crate::rrd::{AggregationFn, DataSourceType, Database};
 
 mod journal;
 use journal::*;
diff --git a/proxmox-rrd/src/cache/journal.rs b/proxmox-rrd/src/cache/journal.rs
index c196b342..67796a46 100644
--- a/proxmox-rrd/src/cache/journal.rs
+++ b/proxmox-rrd/src/cache/journal.rs
@@ -6,7 +6,7 @@ use std::path::PathBuf;
 use std::str::FromStr;
 use std::sync::Arc;
 
-use anyhow::{bail, format_err, Error};
+use anyhow::{Error, bail, format_err};
 use crossbeam_channel::Receiver;
 use nix::fcntl::OFlag;
 
diff --git a/proxmox-rrd/src/cache/rrd_map.rs b/proxmox-rrd/src/cache/rrd_map.rs
index 0ef61cfa..9fa0d44e 100644
--- a/proxmox-rrd/src/cache/rrd_map.rs
+++ b/proxmox-rrd/src/cache/rrd_map.rs
@@ -2,7 +2,7 @@ use std::collections::HashMap;
 use std::path::Path;
 use std::sync::Arc;
 
-use anyhow::{bail, Error};
+use anyhow::{Error, bail};
 
 use proxmox_sys::fs::create_path;
 
diff --git a/proxmox-rrd/src/rrd.rs b/proxmox-rrd/src/rrd.rs
index 440abe06..c6f8b240 100644
--- a/proxmox-rrd/src/rrd.rs
+++ b/proxmox-rrd/src/rrd.rs
@@ -15,11 +15,11 @@ use std::io::{Read, Write};
 use std::os::unix::io::{AsRawFd, FromRawFd, IntoRawFd};
 use std::path::Path;
 
-use anyhow::{bail, format_err, Error};
+use anyhow::{Error, bail, format_err};
 use serde::{Deserialize, Serialize};
 
 use proxmox_schema::api;
-use proxmox_sys::fs::{make_tmp_file, CreateOptions};
+use proxmox_sys::fs::{CreateOptions, make_tmp_file};
 
 /// Proxmox RRD v2 file magic number
 // openssl::sha::sha256(b"Proxmox Round Robin Database file v2.0")[0..8];
diff --git a/proxmox-rrd/tests/file_format_test.rs b/proxmox-rrd/tests/file_format_test.rs
index c505f829..1c2ded85 100644
--- a/proxmox-rrd/tests/file_format_test.rs
+++ b/proxmox-rrd/tests/file_format_test.rs
@@ -1,7 +1,7 @@
 use std::path::Path;
 use std::process::Command;
 
-use anyhow::{bail, Error};
+use anyhow::{Error, bail};
 
 use proxmox_rrd::rrd::Database;
 use proxmox_sys::fs::CreateOptions;
diff --git a/proxmox-schema/src/de/mod.rs b/proxmox-schema/src/de/mod.rs
index eca835e3..a2e84891 100644
--- a/proxmox-schema/src/de/mod.rs
+++ b/proxmox-schema/src/de/mod.rs
@@ -17,9 +17,9 @@ pub mod verify;
 
 pub use extract::ExtractValueDeserializer;
 
-use cow3::{str_slice_to_range, Cow3};
+use cow3::{Cow3, str_slice_to_range};
 
-pub use no_schema::{split_list, SplitList};
+pub use no_schema::{SplitList, split_list};
 
 // Used to disable calling `check_constraints` on a `StringSchema` if it is being deserialized
 // for a `PropertyString`, which performs its own checking.
@@ -645,7 +645,7 @@ impl<'de> de::MapAccess<'de> for MapAccess<'de, '_> {
                 None => {
                     return Err(Error::msg(
                         "value without key, but schema does not define a default key",
-                    ))
+                    ));
                 }
             },
         };
diff --git a/proxmox-schema/src/de/no_schema.rs b/proxmox-schema/src/de/no_schema.rs
index 747ef44a..f5bf6c2e 100644
--- a/proxmox-schema/src/de/no_schema.rs
+++ b/proxmox-schema/src/de/no_schema.rs
@@ -4,8 +4,8 @@ use std::borrow::Cow;
 
 use serde::de;
 
-use super::cow3::Cow3;
 use super::Error;
+use super::cow3::Cow3;
 
 /// This can only deserialize strings and lists of strings and has no schema.
 pub struct NoSchemaDeserializer<'de, 'i> {
diff --git a/proxmox-schema/src/format.rs b/proxmox-schema/src/format.rs
index c1e33a68..6a8ebdd5 100644
--- a/proxmox-schema/src/format.rs
+++ b/proxmox-schema/src/format.rs
@@ -1,6 +1,6 @@
 //! Module to generate and format API Documentation
 
-use anyhow::{bail, Error};
+use anyhow::{Error, bail};
 
 use crate::*;
 
diff --git a/proxmox-schema/src/property_string.rs b/proxmox-schema/src/property_string.rs
index 01b5727a..85660172 100644
--- a/proxmox-schema/src/property_string.rs
+++ b/proxmox-schema/src/property_string.rs
@@ -196,14 +196,18 @@ fn iterate_over_property_string() {
     );
     assert!(iter.next().is_none());
 
-    assert!(PropertyIterator::new(r#"key="open \\ value"#)
-        .next()
-        .unwrap()
-        .is_err());
-    assert!(PropertyIterator::new(r#"key="open \\ value\""#)
-        .next()
-        .unwrap()
-        .is_err());
+    assert!(
+        PropertyIterator::new(r#"key="open \\ value"#)
+            .next()
+            .unwrap()
+            .is_err()
+    );
+    assert!(
+        PropertyIterator::new(r#"key="open \\ value\""#)
+            .next()
+            .unwrap()
+            .is_err()
+    );
 }
 
 /// A wrapper for a de/serializable type which is stored as a property string.
@@ -267,7 +271,7 @@ where
     where
         D: serde::Deserializer<'de>,
     {
-        use crate::de::{set_in_property_string, InPropertyStringGuard};
+        use crate::de::{InPropertyStringGuard, set_in_property_string};
 
         use std::marker::PhantomData;
 
diff --git a/proxmox-schema/src/schema.rs b/proxmox-schema/src/schema.rs
index df87e070..393ceca2 100644
--- a/proxmox-schema/src/schema.rs
+++ b/proxmox-schema/src/schema.rs
@@ -7,8 +7,8 @@
 use std::collections::HashSet;
 use std::fmt;
 
-use anyhow::{bail, format_err, Error};
-use serde_json::{json, Value};
+use anyhow::{Error, bail, format_err};
+use serde_json::{Value, json};
 
 use crate::ConstRegexPattern;
 
diff --git a/proxmox-schema/src/upid.rs b/proxmox-schema/src/upid.rs
index 9bbb66a1..bbd4b0b3 100644
--- a/proxmox-schema/src/upid.rs
+++ b/proxmox-schema/src/upid.rs
@@ -1,6 +1,6 @@
-use anyhow::{bail, Error};
+use anyhow::{Error, bail};
 
-use crate::{const_regex, ApiStringFormat, ApiType, Schema, StringSchema};
+use crate::{ApiStringFormat, ApiType, Schema, StringSchema, const_regex};
 
 /// Unique Process/Task Identifier
 ///
@@ -212,7 +212,7 @@ mod upid_impl {
     use std::os::unix::ffi::OsStrExt;
     use std::sync::atomic::{AtomicUsize, Ordering};
 
-    use anyhow::{bail, format_err, Error};
+    use anyhow::{Error, bail, format_err};
 
     use super::UPID;
 
diff --git a/proxmox-schema/tests/schema_verification.rs b/proxmox-schema/tests/schema_verification.rs
index 2571a552..d446fa57 100644
--- a/proxmox-schema/tests/schema_verification.rs
+++ b/proxmox-schema/tests/schema_verification.rs
@@ -1,5 +1,5 @@
-use anyhow::{bail, Error};
-use serde_json::{json, Value};
+use anyhow::{Error, bail};
+use serde_json::{Value, json};
 
 use proxmox_schema::*;
 
diff --git a/proxmox-section-config/src/lib.rs b/proxmox-section-config/src/lib.rs
index 1fc74e91..fb844ae3 100644
--- a/proxmox-section-config/src/lib.rs
+++ b/proxmox-section-config/src/lib.rs
@@ -24,13 +24,13 @@ use std::collections::HashMap;
 use std::collections::HashSet;
 use std::path::Path;
 
-use anyhow::{bail, format_err, Error};
+use anyhow::{Error, bail, format_err};
 use serde::de::DeserializeOwned;
 use serde::ser::Serialize;
-use serde_json::{json, Value};
+use serde_json::{Value, json};
 
 use proxmox_lang::try_block;
-use proxmox_schema::format::{dump_properties, wrap_text, ParameterDisplayStyle};
+use proxmox_schema::format::{ParameterDisplayStyle, dump_properties, wrap_text};
 use proxmox_schema::*;
 
 pub mod typed;
diff --git a/proxmox-section-config/src/typed.rs b/proxmox-section-config/src/typed.rs
index 31e8e4b2..a1cc5302 100644
--- a/proxmox-section-config/src/typed.rs
+++ b/proxmox-section-config/src/typed.rs
@@ -3,8 +3,8 @@
 use std::collections::HashMap;
 
 use anyhow::Error;
-use serde::{de::DeserializeOwned, Serialize};
-use serde_json::{json, Value};
+use serde::{Serialize, de::DeserializeOwned};
+use serde_json::{Value, json};
 
 use crate::SectionConfig;
 use crate::SectionConfigData as RawSectionConfigData;
diff --git a/proxmox-sendmail/src/lib.rs b/proxmox-sendmail/src/lib.rs
index 050c3322..1f99c701 100644
--- a/proxmox-sendmail/src/lib.rs
+++ b/proxmox-sendmail/src/lib.rs
@@ -6,8 +6,8 @@
 use std::io::Write;
 use std::process::{Command, Stdio};
 
-use anyhow::{bail, Context, Error};
-use percent_encoding::{utf8_percent_encode, AsciiSet, CONTROLS};
+use anyhow::{Context, Error, bail};
+use percent_encoding::{AsciiSet, CONTROLS, utf8_percent_encode};
 
 // Characters in this set will be encoded, so reproduce the inverse of the set described by RFC5987
 // Section 3.2.1 `attr-char`, as that describes all characters that **don't** need encoding:
diff --git a/proxmox-serde/src/json.rs b/proxmox-serde/src/json.rs
index 63574d33..281114b9 100644
--- a/proxmox-serde/src/json.rs
+++ b/proxmox-serde/src/json.rs
@@ -1,4 +1,4 @@
-use anyhow::{bail, Error};
+use anyhow::{Error, bail};
 
 use serde_json::Value;
 
diff --git a/proxmox-shared-cache/src/lib.rs b/proxmox-shared-cache/src/lib.rs
index d0b2148a..893808f5 100644
--- a/proxmox-shared-cache/src/lib.rs
+++ b/proxmox-shared-cache/src/lib.rs
@@ -4,8 +4,8 @@ use std::path::PathBuf;
 use std::time::Duration;
 
 use anyhow::Error;
-use serde::de::DeserializeOwned;
 use serde::Serialize;
+use serde::de::DeserializeOwned;
 
 use proxmox_sys::fs::CreateOptions;
 
diff --git a/proxmox-shared-memory/src/lib.rs b/proxmox-shared-memory/src/lib.rs
index 4a986b09..c5f60ddc 100644
--- a/proxmox-shared-memory/src/lib.rs
+++ b/proxmox-shared-memory/src/lib.rs
@@ -8,7 +8,7 @@ use std::os::unix::io::AsRawFd;
 use std::os::unix::io::FromRawFd;
 use std::path::Path;
 
-use anyhow::{bail, format_err, Error};
+use anyhow::{Error, bail, format_err};
 use nix::errno::Errno;
 use nix::fcntl::OFlag;
 use nix::sys::mman::{MapFlags, ProtFlags};
diff --git a/proxmox-shared-memory/src/shared_mutex.rs b/proxmox-shared-memory/src/shared_mutex.rs
index 49adf5e5..90f1aa20 100644
--- a/proxmox-shared-memory/src/shared_mutex.rs
+++ b/proxmox-shared-memory/src/shared_mutex.rs
@@ -3,10 +3,10 @@ use std::marker::PhantomData;
 use std::mem::MaybeUninit;
 use std::ops::{Deref, DerefMut};
 
-use anyhow::{bail, Error};
+use anyhow::{Error, bail};
 
-use crate::raw_shared_mutex::RawSharedMutex;
 use crate::Init;
+use crate::raw_shared_mutex::RawSharedMutex;
 
 #[derive(Debug)]
 #[repr(C)]
diff --git a/proxmox-shared-memory/tests/raw_shared_mutex.rs b/proxmox-shared-memory/tests/raw_shared_mutex.rs
index 7608377e..ac54a600 100644
--- a/proxmox-shared-memory/tests/raw_shared_mutex.rs
+++ b/proxmox-shared-memory/tests/raw_shared_mutex.rs
@@ -5,7 +5,7 @@ use anyhow::Error;
 use nix::fcntl::OFlag;
 use nix::sys::stat::Mode;
 use nix::unistd::mkdir;
-use proxmox_shared_memory::{check_subtype, initialize_subtype, Init, SharedMemory, SharedMutex};
+use proxmox_shared_memory::{Init, SharedMemory, SharedMutex, check_subtype, initialize_subtype};
 use proxmox_sys::fs::CreateOptions;
 
 use std::sync::atomic::AtomicU64;
diff --git a/proxmox-simple-config/src/lib.rs b/proxmox-simple-config/src/lib.rs
index 710fb53a..df16d077 100644
--- a/proxmox-simple-config/src/lib.rs
+++ b/proxmox-simple-config/src/lib.rs
@@ -4,7 +4,7 @@
 
 use std::io::Write;
 
-use anyhow::{bail, format_err, Error};
+use anyhow::{Error, bail, format_err};
 use serde::{Deserialize, Serialize};
 use serde_json::Value;
 
diff --git a/proxmox-sortable-macro/src/lib.rs b/proxmox-sortable-macro/src/lib.rs
index 1395c77c..026fadf0 100644
--- a/proxmox-sortable-macro/src/lib.rs
+++ b/proxmox-sortable-macro/src/lib.rs
@@ -9,10 +9,10 @@ use std::mem;
 use proc_macro::TokenStream as TokenStream_1;
 use proc_macro2::TokenStream;
 use quote::quote;
+use syn::Error;
 use syn::punctuated::Punctuated;
 use syn::spanned::Spanned;
 use syn::visit_mut::VisitMut;
-use syn::Error;
 
 macro_rules! format_err {
     ($span:expr => $($msg:tt)*) => { Error::new_spanned($span, format!($($msg)*)) };
diff --git a/proxmox-subscription/src/check.rs b/proxmox-subscription/src/check.rs
index 8522bcd3..a098123c 100644
--- a/proxmox-subscription/src/check.rs
+++ b/proxmox-subscription/src/check.rs
@@ -1,15 +1,15 @@
 use std::sync::LazyLock;
 
-use anyhow::{bail, format_err, Error};
+use anyhow::{Error, bail, format_err};
 
 use regex::Regex;
 use serde_json::json;
 
-use proxmox_http::{uri::json_object_to_query, HttpClient};
+use proxmox_http::{HttpClient, uri::json_object_to_query};
 
 use crate::{
-    subscription_info::{md5sum, SHARED_KEY_DATA},
     SubscriptionInfo, SubscriptionStatus,
+    subscription_info::{SHARED_KEY_DATA, md5sum},
 };
 
 static ATTR_RE: LazyLock<Regex> =
diff --git a/proxmox-subscription/src/files.rs b/proxmox-subscription/src/files.rs
index 37008f4a..28aaa23b 100644
--- a/proxmox-subscription/src/files.rs
+++ b/proxmox-subscription/src/files.rs
@@ -1,11 +1,11 @@
 use std::path::Path;
 
-use anyhow::{format_err, Error};
-use proxmox_sys::fs::{replace_file, CreateOptions};
+use anyhow::{Error, format_err};
+use proxmox_sys::fs::{CreateOptions, replace_file};
 
 use crate::{
-    subscription_info::{md5sum, SHARED_KEY_DATA},
     SubscriptionInfo, SubscriptionStatus,
+    subscription_info::{SHARED_KEY_DATA, md5sum},
 };
 
 pub const DEFAULT_SIGNING_KEY: &str = "/usr/share/keyrings/proxmox-offline-signing-key.pub";
@@ -67,7 +67,7 @@ fn parse_subscription_file(raw: &str) -> Result<Option<SubscriptionInfo>, Error>
                 status: SubscriptionStatus::Invalid,
                 message: Some("subscription key mismatch".to_string()),
                 ..info
-            }))
+            }));
         }
         _ => {}
     }
diff --git a/proxmox-subscription/src/lib.rs b/proxmox-subscription/src/lib.rs
index 2ed96903..0e88d77c 100644
--- a/proxmox-subscription/src/lib.rs
+++ b/proxmox-subscription/src/lib.rs
@@ -3,7 +3,7 @@
 mod subscription_info;
 #[cfg(feature = "impl")]
 pub use subscription_info::{
-    get_hardware_address, ProductType, SubscriptionInfo, SubscriptionStatus,
+    ProductType, SubscriptionInfo, SubscriptionStatus, get_hardware_address,
 };
 
 #[cfg(not(feature = "impl"))]
diff --git a/proxmox-subscription/src/sign.rs b/proxmox-subscription/src/sign.rs
index 50ee352b..40118d2f 100644
--- a/proxmox-subscription/src/sign.rs
+++ b/proxmox-subscription/src/sign.rs
@@ -1,4 +1,4 @@
-use anyhow::{bail, Error};
+use anyhow::{Error, bail};
 
 use openssl::{hash::MessageDigest, pkey::Public};
 use serde::{Deserialize, Serialize};
diff --git a/proxmox-subscription/src/subscription_info.rs b/proxmox-subscription/src/subscription_info.rs
index f53b3ce3..7f58b50a 100644
--- a/proxmox-subscription/src/subscription_info.rs
+++ b/proxmox-subscription/src/subscription_info.rs
@@ -1,10 +1,10 @@
 use std::{fmt::Display, str::FromStr};
 
-use anyhow::{bail, Error};
+use anyhow::{Error, bail};
 use serde::{Deserialize, Serialize};
 
 #[cfg(feature = "api-types")]
-use proxmox_schema::{api, Updater};
+use proxmox_schema::{Updater, api};
 
 // Aliases are needed for PVE compat!
 #[cfg_attr(feature = "api-types", api())]
@@ -136,7 +136,7 @@ pub struct SubscriptionInfo {
 pub use _impl::get_hardware_address;
 
 #[cfg(feature = "impl")]
-pub(crate) use _impl::{md5sum, SHARED_KEY_DATA};
+pub(crate) use _impl::{SHARED_KEY_DATA, md5sum};
 
 #[cfg(feature = "impl")]
 mod _impl {
@@ -144,8 +144,8 @@ mod _impl {
     use std::path::Path;
 
     use anyhow::format_err;
-    use anyhow::{bail, Error};
-    use openssl::hash::{hash, DigestBytes, MessageDigest};
+    use anyhow::{Error, bail};
+    use openssl::hash::{DigestBytes, MessageDigest, hash};
     use proxmox_sys::fs::file_get_contents;
     use proxmox_time::TmEditor;
 
diff --git a/proxmox-sys/src/command.rs b/proxmox-sys/src/command.rs
index bc2ff249..e64bd016 100644
--- a/proxmox-sys/src/command.rs
+++ b/proxmox-sys/src/command.rs
@@ -2,7 +2,7 @@
 
 use std::process::{Command, Output};
 
-use anyhow::{bail, format_err, Error};
+use anyhow::{Error, bail, format_err};
 
 /// Helper to check result from [Command] output
 ///
diff --git a/proxmox-sys/src/crypt.rs b/proxmox-sys/src/crypt.rs
index 508b9c15..24abf9f6 100644
--- a/proxmox-sys/src/crypt.rs
+++ b/proxmox-sys/src/crypt.rs
@@ -5,7 +5,7 @@
 
 use std::ffi::{CStr, CString};
 
-use anyhow::{bail, Error};
+use anyhow::{Error, bail};
 
 // from libcrypt1, 'lib/crypt.h.in'
 const CRYPT_OUTPUT_SIZE: usize = 384;
diff --git a/proxmox-sys/src/fd.rs b/proxmox-sys/src/fd.rs
index 386e4222..6f50b69a 100644
--- a/proxmox-sys/src/fd.rs
+++ b/proxmox-sys/src/fd.rs
@@ -2,13 +2,13 @@
 
 use std::os::unix::io::AsRawFd;
 
-use nix::sys::stat::Mode;
 use nix::NixPath;
+use nix::sys::stat::Mode;
 use nix::{fcntl::OFlag, sys::stat};
 
 use std::os::unix::io::{FromRawFd, OwnedFd, RawFd};
 
-use nix::fcntl::{fcntl, FdFlag, F_GETFD, F_SETFD};
+use nix::fcntl::{F_GETFD, F_SETFD, FdFlag, fcntl};
 
 /// Change the `O_CLOEXEC` flag of an existing file descriptor.
 pub fn fd_change_cloexec(fd: RawFd, on: bool) -> Result<(), anyhow::Error> {
diff --git a/proxmox-sys/src/fs/acl.rs b/proxmox-sys/src/fs/acl.rs
index 29aa75ab..1c69edd8 100644
--- a/proxmox-sys/src/fs/acl.rs
+++ b/proxmox-sys/src/fs/acl.rs
@@ -11,8 +11,8 @@ use std::path::Path;
 use std::ptr;
 
 use libc::{c_char, c_int, c_void};
-use nix::errno::Errno;
 use nix::NixPath;
+use nix::errno::Errno;
 
 #[rustfmt::skip]
 mod constants {
diff --git a/proxmox-sys/src/fs/dir.rs b/proxmox-sys/src/fs/dir.rs
index f8fec3a7..c698a7d1 100644
--- a/proxmox-sys/src/fs/dir.rs
+++ b/proxmox-sys/src/fs/dir.rs
@@ -4,7 +4,7 @@ use std::os::unix::ffi::OsStringExt;
 use std::os::unix::io::{AsRawFd, OwnedFd};
 use std::path::{Path, PathBuf};
 
-use anyhow::{bail, format_err, Error};
+use anyhow::{Error, bail, format_err};
 use nix::errno::Errno;
 use nix::fcntl::OFlag;
 use nix::sys::stat;
@@ -12,7 +12,7 @@ use nix::unistd;
 
 use proxmox_lang::try_block;
 
-use crate::fs::{fchown, CreateOptions};
+use crate::fs::{CreateOptions, fchown};
 
 /// The default list of [`OFlag`]'s we want to use when opening directories. Besides ensuring that
 /// the FD indeed points to a directory we also must ensure that it gets closed on exec to avoid
diff --git a/proxmox-sys/src/fs/file.rs b/proxmox-sys/src/fs/file.rs
index 74b9e74e..497a6dc5 100644
--- a/proxmox-sys/src/fs/file.rs
+++ b/proxmox-sys/src/fs/file.rs
@@ -5,12 +5,12 @@ use std::path::{Path, PathBuf};
 #[cfg(feature = "timer")]
 use std::time::Duration;
 
-use anyhow::{bail, format_err, Context as _, Error};
+use anyhow::{Context as _, Error, bail, format_err};
+use nix::NixPath;
 use nix::errno::Errno;
 use nix::fcntl::OFlag;
 use nix::sys::stat;
 use nix::unistd;
-use nix::NixPath;
 use serde_json::Value;
 
 use crate::error::SysError;
diff --git a/proxmox-sys/src/fs/mod.rs b/proxmox-sys/src/fs/mod.rs
index 752b75d2..6cda6326 100644
--- a/proxmox-sys/src/fs/mod.rs
+++ b/proxmox-sys/src/fs/mod.rs
@@ -1,7 +1,7 @@
 //! File system related utilities
 use std::path::Path;
 
-use anyhow::{bail, Context, Error};
+use anyhow::{Context, Error, bail};
 
 use nix::sys::stat;
 use nix::unistd::{Gid, Uid};
diff --git a/proxmox-sys/src/fs/read_dir.rs b/proxmox-sys/src/fs/read_dir.rs
index 09dbac3d..2d6fe52e 100644
--- a/proxmox-sys/src/fs/read_dir.rs
+++ b/proxmox-sys/src/fs/read_dir.rs
@@ -2,7 +2,7 @@ use std::borrow::{Borrow, BorrowMut};
 use std::ops::{Deref, DerefMut};
 use std::os::unix::io::{AsRawFd, RawFd};
 
-use anyhow::{format_err, Error};
+use anyhow::{Error, format_err};
 use nix::dir;
 use nix::dir::Dir;
 use nix::fcntl::OFlag;
diff --git a/proxmox-sys/src/linux/mod.rs b/proxmox-sys/src/linux/mod.rs
index b6efddbb..cfc85757 100644
--- a/proxmox-sys/src/linux/mod.rs
+++ b/proxmox-sys/src/linux/mod.rs
@@ -1,6 +1,6 @@
 //! Linux specific helpers and syscall wrapper
 
-use anyhow::{bail, Error};
+use anyhow::{Error, bail};
 
 use proxmox_io::vec;
 
diff --git a/proxmox-sys/src/linux/pid.rs b/proxmox-sys/src/linux/pid.rs
index 03464551..020cb3d1 100644
--- a/proxmox-sys/src/linux/pid.rs
+++ b/proxmox-sys/src/linux/pid.rs
@@ -4,12 +4,12 @@ use std::fs::File;
 use std::io;
 use std::os::unix::io::{AsFd, AsRawFd, BorrowedFd, FromRawFd, IntoRawFd, OwnedFd, RawFd};
 
+use nix::NixPath;
 use nix::fcntl::OFlag;
 use nix::sys::signal::Signal;
 use nix::sys::signalfd::siginfo;
 use nix::sys::stat::Mode;
 use nix::unistd::Pid;
-use nix::NixPath;
 
 use crate::error::SysResult;
 use crate::linux::procfs::{MountInfo, PidStat};
diff --git a/proxmox-sys/src/linux/procfs/mod.rs b/proxmox-sys/src/linux/procfs/mod.rs
index a1758bc0..a9664cbd 100644
--- a/proxmox-sys/src/linux/procfs/mod.rs
+++ b/proxmox-sys/src/linux/procfs/mod.rs
@@ -8,7 +8,7 @@ use std::str::FromStr;
 use std::sync::{LazyLock, RwLock};
 use std::time::Instant;
 
-use anyhow::{bail, format_err, Error};
+use anyhow::{Error, bail, format_err};
 use nix::unistd::Pid;
 use serde::Serialize;
 
diff --git a/proxmox-sys/src/linux/procfs/mountinfo.rs b/proxmox-sys/src/linux/procfs/mountinfo.rs
index ab449c6a..cd3a89e3 100644
--- a/proxmox-sys/src/linux/procfs/mountinfo.rs
+++ b/proxmox-sys/src/linux/procfs/mountinfo.rs
@@ -6,7 +6,7 @@ use std::os::unix::ffi::OsStrExt;
 use std::path::PathBuf;
 use std::str::FromStr;
 
-use anyhow::{bail, format_err, Error};
+use anyhow::{Error, bail, format_err};
 use nix::sys::stat;
 use nix::unistd::Pid;
 
diff --git a/proxmox-sys/src/linux/tty.rs b/proxmox-sys/src/linux/tty.rs
index d08ae81f..54ce1409 100644
--- a/proxmox-sys/src/linux/tty.rs
+++ b/proxmox-sys/src/linux/tty.rs
@@ -2,7 +2,7 @@ use std::io::{self, IsTerminal, Read, Write};
 use std::mem::MaybeUninit;
 use std::os::unix::io::{AsRawFd, OwnedFd};
 
-use anyhow::{bail, format_err, Error};
+use anyhow::{Error, bail, format_err};
 use nix::fcntl::OFlag;
 use nix::sys::stat::Mode;
 
diff --git a/proxmox-sys/src/logrotate.rs b/proxmox-sys/src/logrotate.rs
index 704a18ce..8759325c 100644
--- a/proxmox-sys/src/logrotate.rs
+++ b/proxmox-sys/src/logrotate.rs
@@ -1,14 +1,14 @@
 //! Log rotation helper
 
-use std::fs::{rename, File};
+use std::fs::{File, rename};
 use std::io::Read;
 use std::os::unix::io::{FromRawFd, IntoRawFd};
 use std::path::{Path, PathBuf};
 
-use anyhow::{bail, Error};
+use anyhow::{Error, bail};
 use nix::unistd;
 
-use crate::fs::{make_tmp_file, CreateOptions};
+use crate::fs::{CreateOptions, make_tmp_file};
 
 /// Used for rotating log files and iterating over them
 pub struct LogRotate {
diff --git a/proxmox-sys/src/macros.rs b/proxmox-sys/src/macros.rs
index a76db90f..1838acf3 100644
--- a/proxmox-sys/src/macros.rs
+++ b/proxmox-sys/src/macros.rs
@@ -16,7 +16,5 @@ macro_rules! c_result {
 /// doing `c_result!(expr)?` (note the question mark).
 #[macro_export]
 macro_rules! c_try {
-    ($expr:expr) => {{
-        $crate::c_result!($expr)?
-    }};
+    ($expr:expr) => {{ $crate::c_result!($expr)? }};
 }
diff --git a/proxmox-sys/src/process_locker.rs b/proxmox-sys/src/process_locker.rs
index 65d2793a..9ea4b554 100644
--- a/proxmox-sys/src/process_locker.rs
+++ b/proxmox-sys/src/process_locker.rs
@@ -11,7 +11,7 @@ use std::collections::HashMap;
 use std::os::unix::io::AsRawFd;
 use std::sync::{Arc, Mutex};
 
-use anyhow::{bail, Error};
+use anyhow::{Error, bail};
 
 // fixme: use F_OFD_ locks when implemented with nix::fcntl
 
diff --git a/proxmox-sys/src/systemd.rs b/proxmox-sys/src/systemd.rs
index 43dc5185..002b27a9 100644
--- a/proxmox-sys/src/systemd.rs
+++ b/proxmox-sys/src/systemd.rs
@@ -2,7 +2,7 @@ use std::ffi::OsString;
 use std::os::unix::ffi::OsStringExt;
 use std::path::PathBuf;
 
-use anyhow::{bail, Error};
+use anyhow::{Error, bail};
 
 #[allow(clippy::manual_range_contains)]
 fn parse_hex_digit(d: u8) -> Result<u8, Error> {
diff --git a/proxmox-systemd/src/journal.rs b/proxmox-systemd/src/journal.rs
index 7fbdcaa3..9dce623f 100644
--- a/proxmox-systemd/src/journal.rs
+++ b/proxmox-systemd/src/journal.rs
@@ -1,4 +1,4 @@
-use std::ffi::{c_int, CString, OsStr};
+use std::ffi::{CString, OsStr, c_int};
 use std::io;
 use std::os::fd::{FromRawFd, OwnedFd};
 use std::os::unix::ffi::OsStrExt;
diff --git a/proxmox-systemd/src/lib.rs b/proxmox-systemd/src/lib.rs
index 456d88c3..d7d270bc 100644
--- a/proxmox-systemd/src/lib.rs
+++ b/proxmox-systemd/src/lib.rs
@@ -3,7 +3,7 @@
 pub(crate) mod sys;
 
 mod escape;
-pub use escape::{escape_unit, unescape_unit, unescape_unit_path, UnescapeError};
+pub use escape::{UnescapeError, escape_unit, unescape_unit, unescape_unit_path};
 
 pub mod journal;
 pub mod notify;
diff --git a/proxmox-systemd/src/notify.rs b/proxmox-systemd/src/notify.rs
index 1c2651b3..4641829d 100644
--- a/proxmox-systemd/src/notify.rs
+++ b/proxmox-systemd/src/notify.rs
@@ -1,4 +1,4 @@
-use std::ffi::{c_char, c_void, CStr, CString};
+use std::ffi::{CStr, CString, c_char, c_void};
 use std::io;
 use std::os::fd::{AsFd, AsRawFd, RawFd};
 
diff --git a/proxmox-tfa/src/api/methods.rs b/proxmox-tfa/src/api/methods.rs
index 03dd8b4b..e60a8f65 100644
--- a/proxmox-tfa/src/api/methods.rs
+++ b/proxmox-tfa/src/api/methods.rs
@@ -3,7 +3,7 @@
 //! This defines the methods & types used in the authentication and TFA configuration API between
 //! PBS, PVE, PMG.
 
-use anyhow::{bail, format_err, Error};
+use anyhow::{Error, bail, format_err};
 
 use super::{OpenUserChallengeData, TfaConfig, TfaInfo, TfaUserData};
 use crate::totp::Totp;
diff --git a/proxmox-tfa/src/api/mod.rs b/proxmox-tfa/src/api/mod.rs
index d7f37771..d2732c67 100644
--- a/proxmox-tfa/src/api/mod.rs
+++ b/proxmox-tfa/src/api/mod.rs
@@ -7,12 +7,12 @@
 use std::collections::HashMap;
 use std::fmt;
 
-use anyhow::{bail, format_err, Error};
+use anyhow::{Error, bail, format_err};
 use serde::{Deserialize, Serialize};
 use serde_json::Value;
 use url::Url;
 
-use webauthn_rs::{proto::UserVerificationPolicy, Webauthn};
+use webauthn_rs::{Webauthn, proto::UserVerificationPolicy};
 
 use crate::totp::Totp;
 use crate::types::bool_is_false;
@@ -1208,11 +1208,11 @@ impl<'de> Deserialize<'de> for TotpEntry {
                         "totp" if totp.is_some() => return Err(A::Error::duplicate_field("totp")),
                         "totp" => totp = Some(map.next_value()?),
                         "last-count" if last_count.is_some() => {
-                            return Err(A::Error::duplicate_field("last-count"))
+                            return Err(A::Error::duplicate_field("last-count"));
                         }
                         "last-count" => last_count = Some(map.next_value()?),
                         other => {
-                            return Err(A::Error::unknown_field(other, &["totp", "last-count"]))
+                            return Err(A::Error::unknown_field(other, &["totp", "last-count"]));
                         }
                     }
                 }
diff --git a/proxmox-tfa/src/api/recovery.rs b/proxmox-tfa/src/api/recovery.rs
index 9629d6ff..7a40c412 100644
--- a/proxmox-tfa/src/api/recovery.rs
+++ b/proxmox-tfa/src/api/recovery.rs
@@ -1,6 +1,6 @@
 use std::io;
 
-use anyhow::{format_err, Error};
+use anyhow::{Error, format_err};
 use openssl::hash::MessageDigest;
 use openssl::pkey::PKey;
 use openssl::sign::Signer;
diff --git a/proxmox-tfa/src/api/webauthn.rs b/proxmox-tfa/src/api/webauthn.rs
index 1793df97..70e95ec6 100644
--- a/proxmox-tfa/src/api/webauthn.rs
+++ b/proxmox-tfa/src/api/webauthn.rs
@@ -1,12 +1,12 @@
 //! Webauthn configuration and challenge data.
 
-use anyhow::{format_err, Error};
+use anyhow::{Error, format_err};
 use serde::{Deserialize, Serialize};
 use url::Url;
 use webauthn_rs::proto::{COSEKey, Credential, CredentialID, UserVerificationPolicy};
 
 #[cfg(feature = "api-types")]
-use proxmox_schema::{api, Updater, UpdaterType};
+use proxmox_schema::{Updater, UpdaterType, api};
 
 use super::IsExpired;
 
diff --git a/proxmox-tfa/src/totp.rs b/proxmox-tfa/src/totp.rs
index 940af542..d880fe93 100644
--- a/proxmox-tfa/src/totp.rs
+++ b/proxmox-tfa/src/totp.rs
@@ -8,7 +8,7 @@ use std::time::{Duration, SystemTime};
 use openssl::hash::MessageDigest;
 use openssl::pkey::PKey;
 use openssl::sign::Signer;
-use percent_encoding::{percent_decode, percent_encode, PercentDecode};
+use percent_encoding::{PercentDecode, percent_decode, percent_encode};
 use serde::{Serialize, Serializer};
 
 /// An error from the TOTP TFA submodule.
@@ -352,7 +352,7 @@ impl Totp {
             None => {
                 return Err(Error::msg(
                     "cannot create otpauth uri without an account name",
-                ))
+                ));
             }
         };
 
@@ -647,7 +647,9 @@ fn test_algorithm_parsing() {
     let period = 30;
     let digits = 6;
     let issuer = "ISSUER";
-    let uri = format!("otpauth://totp/user%40hostname?secret={secret}&issuer={issuer}&algorithm=sha1&digits={digits}&period={period}");
+    let uri = format!(
+        "otpauth://totp/user%40hostname?secret={secret}&issuer={issuer}&algorithm=sha1&digits={digits}&period={period}"
+    );
     let hotp: Totp = uri.parse().expect("failed to parse otp uri");
 
     assert_eq!(hotp.algorithm, Algorithm::Sha1);
diff --git a/proxmox-tfa/src/u2f.rs b/proxmox-tfa/src/u2f.rs
index ffd7d64c..2f00120b 100644
--- a/proxmox-tfa/src/u2f.rs
+++ b/proxmox-tfa/src/u2f.rs
@@ -514,8 +514,7 @@ mod test {
 
     const TEST_APPID: &str = "https://u2ftest.enonet.errno.eu";
 
-    const TEST_REGISTRATION_JSON: &str =
-        "{\"challenge\":\"mZoWLngnAh8p98nPkFOIBXecd0CbmgEx5tEd5jNswgY\",\"response\":{\"client\
+    const TEST_REGISTRATION_JSON: &str = "{\"challenge\":\"mZoWLngnAh8p98nPkFOIBXecd0CbmgEx5tEd5jNswgY\",\"response\":{\"client\
         Data\":\"eyJjaGFsbGVuZ2UiOiJtWm9XTG5nbkFoOHA5OG5Qa0ZPSUJYZWNkMENibWdFeDV0RWQ1ak5zd2dZI\
         iwib3JpZ2luIjoiaHR0cHM6Ly91MmZ0ZXN0LmVub25ldC5lcnJuby5ldSIsInR5cCI6Im5hdmlnYXRvci5pZC5\
         maW5pc2hFbnJvbGxtZW50In0\",\"registrationData\":\"BQR_9TmMowVeoAHp3ABljCa90eNG87t76D4W\
@@ -533,8 +532,7 @@ mod test {
         SbtOrrwswjOKEzwp6EonkCIFBxbLAmwUnblAWOVELASi610ZfPK-7qx2VwkWfHqnll\",\"version\":\"U2F\
         _V2\"}}";
 
-    const TEST_AUTH_JSON: &str =
-        "{\"challenge\":\"8LE_-7Rd1vB3Otn3vJ7GyiwRQtYPMv-BWliCejH0d4Y\",\"response\":{\"clientD\
+    const TEST_AUTH_JSON: &str = "{\"challenge\":\"8LE_-7Rd1vB3Otn3vJ7GyiwRQtYPMv-BWliCejH0d4Y\",\"response\":{\"clientD\
         ata\":\"eyJjaGFsbGVuZ2UiOiI4TEVfLTdSZDF2QjNPdG4zdko3R3lpd1JRdFlQTXYtQldsaUNlakgwZDRZIiw\
         ib3JpZ2luIjoiaHR0cHM6Ly91MmZ0ZXN0LmVub25ldC5lcnJuby5ldSIsInR5cCI6Im5hdmlnYXRvci5pZC5nZX\
         RBc3NlcnRpb24ifQ\",\"keyHandle\":\"eW3zVxEF8gPsG8eT9cgllzmSzkPdHVlXXV8m52ncX6KL8pJ1loVv\
diff --git a/proxmox-time-api/src/time_impl.rs b/proxmox-time-api/src/time_impl.rs
index a548c717..8fc7e3ec 100644
--- a/proxmox-time-api/src/time_impl.rs
+++ b/proxmox-time-api/src/time_impl.rs
@@ -1,4 +1,4 @@
-use anyhow::{bail, format_err, Error};
+use anyhow::{Error, bail, format_err};
 
 use proxmox_product_config::replace_system_config;
 use proxmox_sys::fs::file_read_firstline;
diff --git a/proxmox-time/src/calendar_event.rs b/proxmox-time/src/calendar_event.rs
index 696a11a2..22a4b340 100644
--- a/proxmox-time/src/calendar_event.rs
+++ b/proxmox-time/src/calendar_event.rs
@@ -9,8 +9,8 @@ use nom::{
 };
 
 use crate::date_time_value::DateTimeValue;
-use crate::parse_helpers::{parse_complete_line, parse_error, parse_time_comp, IResult};
-use crate::{parse_weekdays_range, WeekDays};
+use crate::parse_helpers::{IResult, parse_complete_line, parse_error, parse_time_comp};
+use crate::{WeekDays, parse_weekdays_range};
 
 /// Calendar events may be used to refer to one or more points in time in a
 /// single expression. They are designed after the systemd.time Calendar Events
diff --git a/proxmox-time/src/daily_duration.rs b/proxmox-time/src/daily_duration.rs
index adcbc637..df24b42c 100644
--- a/proxmox-time/src/daily_duration.rs
+++ b/proxmox-time/src/daily_duration.rs
@@ -5,8 +5,8 @@ use nom::{
     bytes::complete::tag, character::complete::space0, error::context, multi::separated_list1,
 };
 
-use crate::parse_helpers::{parse_complete_line, parse_error, parse_hm_time, IResult};
-use crate::{parse_weekdays_range, WeekDays};
+use crate::parse_helpers::{IResult, parse_complete_line, parse_error, parse_hm_time};
+use crate::{WeekDays, parse_weekdays_range};
 
 #[cfg(not(target_arch = "wasm32"))]
 use crate::TmEditor;
@@ -127,7 +127,7 @@ fn parse_daily_duration_incomplete(mut i: &str) -> IResult<&str, DailyDuration>
 #[cfg(test)]
 mod test {
 
-    use anyhow::{bail, Error};
+    use anyhow::{Error, bail};
 
     use super::*;
 
diff --git a/proxmox-time/src/parse_helpers.rs b/proxmox-time/src/parse_helpers.rs
index 94d077f9..8afa8ccf 100644
--- a/proxmox-time/src/parse_helpers.rs
+++ b/proxmox-time/src/parse_helpers.rs
@@ -1,4 +1,4 @@
-use anyhow::{bail, Error};
+use anyhow::{Error, bail};
 
 use super::daily_duration::*;
 
diff --git a/proxmox-time/src/posix.rs b/proxmox-time/src/posix.rs
index c8064bf4..ee555bb1 100644
--- a/proxmox-time/src/posix.rs
+++ b/proxmox-time/src/posix.rs
@@ -2,7 +2,7 @@
 
 use std::ffi::{CStr, CString};
 
-use anyhow::{bail, format_err, Error};
+use anyhow::{Error, bail, format_err};
 
 /// Safe bindings to libc timelocal
 ///
diff --git a/proxmox-time/src/test.rs b/proxmox-time/src/test.rs
index d7e86c30..dae818a6 100644
--- a/proxmox-time/src/test.rs
+++ b/proxmox-time/src/test.rs
@@ -1,4 +1,4 @@
-use anyhow::{bail, Error};
+use anyhow::{Error, bail};
 
 use super::*;
 
diff --git a/proxmox-time/src/time_span.rs b/proxmox-time/src/time_span.rs
index 6081a534..5b6b30ef 100644
--- a/proxmox-time/src/time_span.rs
+++ b/proxmox-time/src/time_span.rs
@@ -44,7 +44,7 @@ use std::sync::LazyLock;
 use anyhow::Error;
 use nom::{bytes::complete::take_while1, character::complete::space0, combinator::opt};
 
-use crate::parse_helpers::{parse_complete_line, parse_error, parse_u64, IResult};
+use crate::parse_helpers::{IResult, parse_complete_line, parse_error, parse_u64};
 
 static TIME_SPAN_UNITS: LazyLock<HashMap<&'static str, f64>> = LazyLock::new(|| {
     let mut map = HashMap::new();
diff --git a/proxmox-time/src/wasm.rs b/proxmox-time/src/wasm.rs
index c85f2a10..38ddd316 100644
--- a/proxmox-time/src/wasm.rs
+++ b/proxmox-time/src/wasm.rs
@@ -1,4 +1,4 @@
-use anyhow::{bail, format_err, Error};
+use anyhow::{Error, bail, format_err};
 
 /// Returns Unix Epoch (now)
 pub fn epoch_i64() -> i64 {
diff --git a/proxmox-time/src/week_days.rs b/proxmox-time/src/week_days.rs
index c409d292..3948ff5c 100644
--- a/proxmox-time/src/week_days.rs
+++ b/proxmox-time/src/week_days.rs
@@ -1,7 +1,7 @@
 use bitflags::bitflags;
 use nom::{bytes::complete::tag, character::complete::alpha1, combinator::opt, sequence::pair};
 
-use crate::parse_helpers::{parse_error, IResult};
+use crate::parse_helpers::{IResult, parse_error};
 
 bitflags! {
     /// Defines one or more days of a week.
diff --git a/proxmox-uuid/src/lib.rs b/proxmox-uuid/src/lib.rs
index 09a70b49..968f3878 100644
--- a/proxmox-uuid/src/lib.rs
+++ b/proxmox-uuid/src/lib.rs
@@ -61,7 +61,7 @@ pub struct Uuid(Box<[u8; 16]>);
 impl Uuid {
     /// Generate a uuid with `uuid_generate(3)`.
     pub fn generate() -> Self {
-        use std::alloc::{alloc, Layout};
+        use std::alloc::{Layout, alloc};
         let uuid = unsafe { alloc(Layout::new::<[u8; 16]>()) as *mut [u8; 16] };
         unsafe { uuid_generate(uuid) };
         Self(unsafe { Box::from_raw(uuid) })
@@ -92,7 +92,7 @@ impl Uuid {
     /// assert_eq!(uuid1, uuid2);
     /// ```
     pub fn parse_str(src: &str) -> Result<Self, UuidError> {
-        use std::alloc::{alloc, Layout};
+        use std::alloc::{Layout, alloc};
         let uuid: *mut [u8; 16] = unsafe { alloc(Layout::new::<[u8; 16]>()) as *mut [u8; 16] };
         if src.len() == 36 {
             // Unfortunately the manpage of `uuid_parse(3)` states that it technically requires a
diff --git a/proxmox-worker-task/src/lib.rs b/proxmox-worker-task/src/lib.rs
index 743ae53f..d6d7b330 100644
--- a/proxmox-worker-task/src/lib.rs
+++ b/proxmox-worker-task/src/lib.rs
@@ -1,4 +1,4 @@
-use anyhow::{bail, Error};
+use anyhow::{Error, bail};
 
 /// Worker task abstraction
 ///
-- 
2.39.5



_______________________________________________
pbs-devel mailing list
pbs-devel@lists.proxmox.com
https://lists.proxmox.com/cgi-bin/mailman/listinfo/pbs-devel


^ permalink raw reply	[flat|nested] 9+ messages in thread

* [pbs-devel] [PATCH proxmox 8/9] run cargo clippy --fix
  2025-03-04 14:40 [pbs-devel] [PATCH proxmox 1/9] mark extern C blocks as unsafe Maximiliano Sandoval
                   ` (5 preceding siblings ...)
  2025-03-04 14:40 ` [pbs-devel] [PATCH proxmox 7/9] run rustfmt with " Maximiliano Sandoval
@ 2025-03-04 14:40 ` Maximiliano Sandoval
  2025-03-04 14:40 ` [pbs-devel] [PATCH proxmox 9/9] manual clippy fixes Maximiliano Sandoval
  7 siblings, 0 replies; 9+ messages in thread
From: Maximiliano Sandoval @ 2025-03-04 14:40 UTC (permalink / raw)
  To: pbs-devel

Signed-off-by: Maximiliano Sandoval <m.sandoval@proxmox.com>
---
 proxmox-access-control/src/acl.rs      | 10 ++--------
 proxmox-acme/src/types.rs              |  6 ++++++
 proxmox-auth-api/src/auth_key.rs       |  6 ++++++
 proxmox-compression/src/zip.rs         |  2 +-
 proxmox-io/src/sparse_copy.rs          |  3 +--
 proxmox-log/src/file_logger.rs         |  2 +-
 proxmox-rest-server/src/worker_task.rs |  9 ++-------
 proxmox-rrd/src/cache.rs               |  4 ++--
 proxmox-rrd/src/cache/journal.rs       |  4 ++--
 proxmox-rrd/src/cache/rrd_map.rs       |  6 +++---
 proxmox-schema/src/upid.rs             |  2 +-
 proxmox-shared-cache/src/lib.rs        | 10 +++++-----
 proxmox-sys/src/logrotate.rs           |  2 +-
 proxmox-sys/src/systemd.rs             |  2 +-
 proxmox-systemd/src/escape.rs          |  2 +-
 proxmox-uuid/src/lib.rs                | 12 ++++++------
 16 files changed, 41 insertions(+), 41 deletions(-)

diff --git a/proxmox-access-control/src/acl.rs b/proxmox-access-control/src/acl.rs
index 2e5df932..48a096aa 100644
--- a/proxmox-access-control/src/acl.rs
+++ b/proxmox-access-control/src/acl.rs
@@ -208,10 +208,7 @@ impl AclTree {
         let mut node = &self.root;
         for outer in path {
             for comp in outer.split('/') {
-                node = match node.children.get(comp) {
-                    Some(n) => n,
-                    None => return None,
-                };
+                node = node.children.get(comp)?;
             }
         }
         Some(node)
@@ -221,10 +218,7 @@ impl AclTree {
         let mut node = &mut self.root;
         for outer in path {
             for comp in outer.split('/') {
-                node = match node.children.get_mut(comp) {
-                    Some(n) => n,
-                    None => return None,
-                };
+                node = node.children.get_mut(comp)?;
             }
         }
         Some(node)
diff --git a/proxmox-acme/src/types.rs b/proxmox-acme/src/types.rs
index e5a6b34d..0ec2deeb 100644
--- a/proxmox-acme/src/types.rs
+++ b/proxmox-acme/src/types.rs
@@ -38,6 +38,12 @@ pub enum AccountStatus {
     Revoked,
 }
 
+impl Default for AccountStatus {
+    fn default() -> Self {
+        Self::new()
+    }
+}
+
 impl AccountStatus {
     /// Create a new instance with state New.
     #[inline]
diff --git a/proxmox-auth-api/src/auth_key.rs b/proxmox-auth-api/src/auth_key.rs
index 98684853..b7515b75 100644
--- a/proxmox-auth-api/src/auth_key.rs
+++ b/proxmox-auth-api/src/auth_key.rs
@@ -237,6 +237,12 @@ pub struct Keyring {
     public_keys: Vec<VerificationKey>,
 }
 
+impl Default for Keyring {
+    fn default() -> Self {
+        Self::new()
+    }
+}
+
 impl Keyring {
     pub fn generate_new_rsa() -> Result<Self, Error> {
         PrivateKey::generate_rsa().map(Self::with_private_key)
diff --git a/proxmox-compression/src/zip.rs b/proxmox-compression/src/zip.rs
index d074be5a..415e2cf8 100644
--- a/proxmox-compression/src/zip.rs
+++ b/proxmox-compression/src/zip.rs
@@ -360,7 +360,7 @@ impl ZipEntry {
                 comment_len: 0,
                 start_disk: 0,
                 internal_flags: 0,
-                external_flags: (self.mode as u32) << 16 | (!self.is_file as u32) << 4,
+                external_flags: ((self.mode as u32) << 16) | ((!self.is_file as u32) << 4),
                 offset,
             },
         )
diff --git a/proxmox-io/src/sparse_copy.rs b/proxmox-io/src/sparse_copy.rs
index 9d09e6ad..fad1a51a 100644
--- a/proxmox-io/src/sparse_copy.rs
+++ b/proxmox-io/src/sparse_copy.rs
@@ -14,8 +14,7 @@ const BUF_SIZE: usize = 8192;
 /// This is implemented in a way which allows the compiler to utilize SIMD instructions.
 pub fn buffer_is_zero(buf: &[u8]) -> bool {
     !buf.chunks(128)
-        .map(|aa| aa.iter().fold(0, |a, b| a | b) != 0)
-        .any(|a| a)
+        .any(|aa| aa.iter().fold(0, |a, b| a | b) != 0)
 }
 
 /// Result of a sparse copy call.
diff --git a/proxmox-log/src/file_logger.rs b/proxmox-log/src/file_logger.rs
index b5d28ace..e33bd09f 100644
--- a/proxmox-log/src/file_logger.rs
+++ b/proxmox-log/src/file_logger.rs
@@ -94,7 +94,7 @@ impl FileLogger {
         }
 
         let file =
-            atomic_open_or_create_file(&file_name, flags, &[], options.file_opts.clone(), false)?;
+            atomic_open_or_create_file(&file_name, flags, &[], options.file_opts, false)?;
 
         Ok(file)
     }
diff --git a/proxmox-rest-server/src/worker_task.rs b/proxmox-rest-server/src/worker_task.rs
index 6f0fcab2..88d79776 100644
--- a/proxmox-rest-server/src/worker_task.rs
+++ b/proxmox-rest-server/src/worker_task.rs
@@ -136,7 +136,6 @@ impl WorkerTaskSetup {
     fn lock_task_list_files(&self, exclusive: bool) -> Result<TaskListLockGuard, Error> {
         let options = self
             .file_opts
-            .clone()
             .perm(nix::sys::stat::Mode::from_bits_truncate(0o660));
 
         let timeout = std::time::Duration::new(15, 0);
@@ -163,7 +162,6 @@ impl WorkerTaskSetup {
         let mut path = self.log_directory(upid);
         let dir_opts = self
             .file_opts
-            .clone()
             .perm(nix::sys::stat::Mode::from_bits_truncate(0o755));
 
         create_path(&path, None, Some(dir_opts))?;
@@ -222,7 +220,6 @@ impl WorkerTaskSetup {
 
         let options = self
             .file_opts
-            .clone()
             .perm(nix::sys::stat::Mode::from_bits_truncate(0o660));
 
         replace_file(&self.active_tasks_fn, active_raw.as_bytes(), options, false)?;
@@ -237,7 +234,6 @@ impl WorkerTaskSetup {
         if !finish_list.is_empty() {
             let options = self
                 .file_opts
-                .clone()
                 .perm(nix::sys::stat::Mode::from_bits_truncate(0o660));
 
             let mut writer = atomic_open_or_create_file(
@@ -268,10 +264,9 @@ impl WorkerTaskSetup {
         try_block!({
             let dir_opts = self
                 .file_opts
-                .clone()
                 .perm(nix::sys::stat::Mode::from_bits_truncate(0o755));
 
-            create_path(&self.taskdir, Some(dir_opts.clone()), Some(dir_opts))?;
+            create_path(&self.taskdir, Some(dir_opts), Some(dir_opts))?;
             // fixme:??? create_path(pbs_buildcfg::PROXMOX_BACKUP_RUN_DIR, None, Some(opts))?;
             Ok(())
         })
@@ -901,7 +896,7 @@ impl WorkerTask {
             exclusive: true,
             prefix_time: true,
             read: true,
-            file_opts: setup.file_opts.clone(),
+            file_opts: setup.file_opts,
             ..Default::default()
         };
         let logger = FileLogger::new(path, logger_options)?;
diff --git a/proxmox-rrd/src/cache.rs b/proxmox-rrd/src/cache.rs
index e1c574c8..092a3626 100644
--- a/proxmox-rrd/src/cache.rs
+++ b/proxmox-rrd/src/cache.rs
@@ -68,8 +68,8 @@ impl Cache {
 
         create_path(
             &basedir,
-            Some(dir_options.clone()),
-            Some(dir_options.clone()),
+            Some(dir_options),
+            Some(dir_options),
         )
         .map_err(|err: Error| format_err!("unable to create rrdb stat dir - {}", err))?;
 
diff --git a/proxmox-rrd/src/cache/journal.rs b/proxmox-rrd/src/cache/journal.rs
index 67796a46..9e9f34d4 100644
--- a/proxmox-rrd/src/cache/journal.rs
+++ b/proxmox-rrd/src/cache/journal.rs
@@ -116,7 +116,7 @@ impl JournalState {
             &journal_path,
             flags,
             &[],
-            self.config.file_options.clone(),
+            self.config.file_options,
             false,
         )?;
         Ok(BufReader::new(journal))
@@ -131,7 +131,7 @@ impl JournalState {
             &journal_path,
             flags,
             &[],
-            config.file_options.clone(),
+            config.file_options,
             false,
         )?;
         Ok(journal)
diff --git a/proxmox-rrd/src/cache/rrd_map.rs b/proxmox-rrd/src/cache/rrd_map.rs
index 9fa0d44e..bac60a4a 100644
--- a/proxmox-rrd/src/cache/rrd_map.rs
+++ b/proxmox-rrd/src/cache/rrd_map.rs
@@ -51,8 +51,8 @@ impl RRDMap {
                 None => {
                     create_path(
                         path.parent().unwrap(),
-                        Some(self.config.dir_options.clone()),
-                        Some(self.config.dir_options.clone()),
+                        Some(self.config.dir_options),
+                        Some(self.config.dir_options),
                     )?;
 
                     (self.create_rrd_cb)(dst)
@@ -82,7 +82,7 @@ impl RRDMap {
         if let Some(rrd) = self.map.get(rel_path) {
             let mut path = self.config.basedir.clone();
             path.push(rel_path);
-            rrd.save(&path, self.config.file_options.clone(), true)
+            rrd.save(&path, self.config.file_options, true)
         } else {
             bail!("rrd file {} not loaded", rel_path);
         }
diff --git a/proxmox-schema/src/upid.rs b/proxmox-schema/src/upid.rs
index bbd4b0b3..ce51bf1e 100644
--- a/proxmox-schema/src/upid.rs
+++ b/proxmox-schema/src/upid.rs
@@ -191,7 +191,7 @@ fn unescape_id(text: &str) -> Result<String, Error> {
             }
             let h1 = hex_digit(i[2])?;
             let h0 = hex_digit(i[3])?;
-            data.push(h1 << 4 | h0);
+            data.push((h1 << 4) | h0);
             i = &i[4..]
         } else if next == b'-' {
             data.push(b'/');
diff --git a/proxmox-shared-cache/src/lib.rs b/proxmox-shared-cache/src/lib.rs
index 893808f5..71a82cc9 100644
--- a/proxmox-shared-cache/src/lib.rs
+++ b/proxmox-shared-cache/src/lib.rs
@@ -127,7 +127,7 @@ impl SharedCache {
         proxmox_sys::fs::replace_file(
             &self.path,
             new_content.as_bytes(),
-            self.create_options.clone(),
+            self.create_options,
             true,
         )?;
 
@@ -137,7 +137,7 @@ impl SharedCache {
     /// Removes all items from the cache.
     pub fn delete(&self, lock_timeout: Duration) -> Result<(), Error> {
         let _lock = self.lock(lock_timeout)?;
-        proxmox_sys::fs::replace_file(&self.path, &[], self.create_options.clone(), true)?;
+        proxmox_sys::fs::replace_file(&self.path, &[], self.create_options, true)?;
 
         Ok(())
     }
@@ -149,7 +149,7 @@ impl SharedCache {
             lockfile_path,
             lock_timeout,
             true,
-            self.create_options.clone(),
+            self.create_options,
         )
     }
 }
@@ -180,8 +180,8 @@ mod tests {
 
             proxmox_sys::fs::create_path(
                 &path,
-                Some(dir_options.clone()),
-                Some(dir_options.clone()),
+                Some(dir_options),
+                Some(dir_options),
             )
             .unwrap();
 
diff --git a/proxmox-sys/src/logrotate.rs b/proxmox-sys/src/logrotate.rs
index 8759325c..a995fab1 100644
--- a/proxmox-sys/src/logrotate.rs
+++ b/proxmox-sys/src/logrotate.rs
@@ -64,7 +64,7 @@ impl LogRotate {
         options: &CreateOptions,
     ) -> Result<(), Error> {
         let mut source = File::open(source_path)?;
-        let (fd, tmp_path) = make_tmp_file(target_path, options.clone())?;
+        let (fd, tmp_path) = make_tmp_file(target_path, *options)?;
         let target = unsafe { File::from_raw_fd(fd.into_raw_fd()) };
         let mut encoder = match zstd::stream::write::Encoder::new(target, 0) {
             Ok(encoder) => encoder,
diff --git a/proxmox-sys/src/systemd.rs b/proxmox-sys/src/systemd.rs
index 002b27a9..6fe11e16 100644
--- a/proxmox-sys/src/systemd.rs
+++ b/proxmox-sys/src/systemd.rs
@@ -90,7 +90,7 @@ fn unescape_unit_do(text: &str) -> Result<Vec<u8>, Error> {
             }
             let h1 = parse_hex_digit(i[2])?;
             let h0 = parse_hex_digit(i[3])?;
-            data.push(h1 << 4 | h0);
+            data.push((h1 << 4) | h0);
             i = &i[4..]
         } else if next == b'-' {
             data.push(b'/');
diff --git a/proxmox-systemd/src/escape.rs b/proxmox-systemd/src/escape.rs
index f73beed3..392907bc 100644
--- a/proxmox-systemd/src/escape.rs
+++ b/proxmox-systemd/src/escape.rs
@@ -97,7 +97,7 @@ fn unescape_unit_do(text: &str) -> Result<Vec<u8>, UnescapeError> {
             }
             let h1 = parse_hex_digit(i[2])?;
             let h0 = parse_hex_digit(i[3])?;
-            data.push(h1 << 4 | h0);
+            data.push((h1 << 4) | h0);
             i = &i[4..]
         } else if next == b'-' {
             data.push(b'/');
diff --git a/proxmox-uuid/src/lib.rs b/proxmox-uuid/src/lib.rs
index 968f3878..5fa635d4 100644
--- a/proxmox-uuid/src/lib.rs
+++ b/proxmox-uuid/src/lib.rs
@@ -103,25 +103,25 @@ impl Uuid {
                 return Err(UuidError);
             }
             for i in 0..4 {
-                uuid[i] = hex_digit(src[2 * i])? << 4 | hex_digit(src[2 * i + 1])?;
+                uuid[i] = (hex_digit(src[2 * i])? << 4) | hex_digit(src[2 * i + 1])?;
             }
             for i in 4..6 {
-                uuid[i] = hex_digit(src[2 * i + 1])? << 4 | hex_digit(src[2 * i + 2])?;
+                uuid[i] = (hex_digit(src[2 * i + 1])? << 4) | hex_digit(src[2 * i + 2])?;
             }
             for i in 6..8 {
-                uuid[i] = hex_digit(src[2 * i + 2])? << 4 | hex_digit(src[2 * i + 3])?;
+                uuid[i] = (hex_digit(src[2 * i + 2])? << 4) | hex_digit(src[2 * i + 3])?;
             }
             for i in 8..10 {
-                uuid[i] = hex_digit(src[2 * i + 3])? << 4 | hex_digit(src[2 * i + 4])?;
+                uuid[i] = (hex_digit(src[2 * i + 3])? << 4) | hex_digit(src[2 * i + 4])?;
             }
             for i in 10..16 {
-                uuid[i] = hex_digit(src[2 * i + 4])? << 4 | hex_digit(src[2 * i + 5])?;
+                uuid[i] = (hex_digit(src[2 * i + 4])? << 4) | hex_digit(src[2 * i + 5])?;
             }
         } else if src.len() == 32 {
             let uuid: &mut [u8] = unsafe { &mut (*uuid)[..] };
             let src = src.as_bytes();
             for i in 0..16 {
-                uuid[i] = hex_digit(src[2 * i])? << 4 | hex_digit(src[2 * i + 1])?;
+                uuid[i] = (hex_digit(src[2 * i])? << 4) | hex_digit(src[2 * i + 1])?;
             }
         } else {
             return Err(UuidError);
-- 
2.39.5



_______________________________________________
pbs-devel mailing list
pbs-devel@lists.proxmox.com
https://lists.proxmox.com/cgi-bin/mailman/listinfo/pbs-devel


^ permalink raw reply	[flat|nested] 9+ messages in thread

* [pbs-devel] [PATCH proxmox 9/9] manual clippy fixes
  2025-03-04 14:40 [pbs-devel] [PATCH proxmox 1/9] mark extern C blocks as unsafe Maximiliano Sandoval
                   ` (6 preceding siblings ...)
  2025-03-04 14:40 ` [pbs-devel] [PATCH proxmox 8/9] run cargo clippy --fix Maximiliano Sandoval
@ 2025-03-04 14:40 ` Maximiliano Sandoval
  7 siblings, 0 replies; 9+ messages in thread
From: Maximiliano Sandoval @ 2025-03-04 14:40 UTC (permalink / raw)
  To: pbs-devel

- The create_new change is fine since this is a test.
- The api breakage of sort_package_list is OK since the function does
  not have any user outside of proxmox-apt

Signed-off-by: Maximiliano Sandoval <m.sandoval@proxmox.com>
---
 proxmox-apt/src/cache.rs       | 2 +-
 proxmox-sys/tests/xattr.rs     | 2 +-
 proxmox-tfa/src/api/methods.rs | 5 +----
 proxmox-tfa/src/totp.rs        | 2 +-
 4 files changed, 4 insertions(+), 7 deletions(-)

diff --git a/proxmox-apt/src/cache.rs b/proxmox-apt/src/cache.rs
index 1c04481f..5ad81f8f 100644
--- a/proxmox-apt/src/cache.rs
+++ b/proxmox-apt/src/cache.rs
@@ -291,7 +291,7 @@ where
     None
 }
 
-pub fn sort_package_list(packages: &mut Vec<APTUpdateInfo>) {
+pub fn sort_package_list(packages: &mut [APTUpdateInfo]) {
     let cache = apt_pkg_native::Cache::get_singleton();
     packages.sort_by(|left, right| {
         cache
diff --git a/proxmox-sys/tests/xattr.rs b/proxmox-sys/tests/xattr.rs
index 02d43934..e8e77b10 100644
--- a/proxmox-sys/tests/xattr.rs
+++ b/proxmox-sys/tests/xattr.rs
@@ -13,7 +13,7 @@ fn test_fsetxattr_fgetxattr() {
 
     let file = OpenOptions::new()
         .write(true)
-        .create(true)
+        .create_new(true)
         .open(&path)
         .unwrap();
 
diff --git a/proxmox-tfa/src/api/methods.rs b/proxmox-tfa/src/api/methods.rs
index e60a8f65..3d7e70ba 100644
--- a/proxmox-tfa/src/api/methods.rs
+++ b/proxmox-tfa/src/api/methods.rs
@@ -98,10 +98,7 @@ pub fn list_user_tfa(config: &TfaConfig, userid: &str) -> Result<Vec<TypedTfaInf
 ///
 /// In case this returns `None` a `NOT_FOUND` http error should be returned.
 pub fn get_tfa_entry(config: &TfaConfig, userid: &str, id: &str) -> Option<TypedTfaInfo> {
-    let user_data = match config.users.get(userid) {
-        Some(u) => u,
-        None => return None,
-    };
+    let user_data = config.users.get(userid)?;
 
     Some(
         match {
diff --git a/proxmox-tfa/src/totp.rs b/proxmox-tfa/src/totp.rs
index d880fe93..1524fdfc 100644
--- a/proxmox-tfa/src/totp.rs
+++ b/proxmox-tfa/src/totp.rs
@@ -546,7 +546,7 @@ impl PartialEq<&str> for TotpValue {
     fn eq(&self, other: &&str) -> bool {
         // Since we use `from_str_radix` with a radix of 10 explicitly, we can check the number of
         // bytes against the number of digits.
-        if other.as_bytes().len() != (self.digits as usize) {
+        if other.len() != (self.digits as usize) {
             return false;
         }
 
-- 
2.39.5



_______________________________________________
pbs-devel mailing list
pbs-devel@lists.proxmox.com
https://lists.proxmox.com/cgi-bin/mailman/listinfo/pbs-devel


^ permalink raw reply	[flat|nested] 9+ messages in thread

end of thread, other threads:[~2025-03-04 15:31 UTC | newest]

Thread overview: 9+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2025-03-04 14:40 [pbs-devel] [PATCH proxmox 1/9] mark extern C blocks as unsafe Maximiliano Sandoval
2025-03-04 14:40 ` [pbs-devel] [PATCH proxmox 2/9] daemon: set_var is now unsafe Maximiliano Sandoval
2025-03-04 14:40 ` [pbs-devel] [PATCH proxmox 3/9] mark blocks inside unsafe fns unsafe Maximiliano Sandoval
2025-03-04 14:40 ` [pbs-devel] [PATCH proxmox 4/9] broadcast_future: accommodate to edition 2024 changes to RPIT Maximiliano Sandoval
2025-03-04 14:40 ` [pbs-devel] [PATCH proxmox 5/9] procfs: add variable bindings for std::fs::read Maximiliano Sandoval
2025-03-04 14:40 ` [pbs-devel] [PATCH proxmox 6/9] port to edition 2024 Maximiliano Sandoval
2025-03-04 14:40 ` [pbs-devel] [PATCH proxmox 7/9] run rustfmt with " Maximiliano Sandoval
2025-03-04 14:40 ` [pbs-devel] [PATCH proxmox 8/9] run cargo clippy --fix Maximiliano Sandoval
2025-03-04 14:40 ` [pbs-devel] [PATCH proxmox 9/9] manual clippy fixes Maximiliano Sandoval

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
Service provided by Proxmox Server Solutions GmbH | Privacy | Legal