Improve error reporting

This commit is contained in:
2026-01-02 22:35:24 +09:00
parent 1780114b6b
commit 3d7da7121a

View File

@@ -5,19 +5,16 @@ pub use types::{NiceLevel, Priority};
#[derive(thiserror::Error, Debug)]
pub enum Error {
#[error("Permission denied")]
PermissionDenied,
#[error("Permission denied: {0}")]
PermissionDenied(String),
#[error("Invalid PID")]
InvalidPid,
#[error("Invalid PID or Thread ID")]
InvalidPidOrTid,
#[error("Invalid thread ID")]
InvalidThreadId,
#[error("Got invalid max priority from RTKit")]
#[error("Got invalid max priority from RTKit: {0}")]
InvalidMaxPriority(i32),
#[error("Got invalid min nice level from RTKit")]
#[error("Got invalid min nice level from RTKit: {0}")]
InvalidMinNiceLevel(i32),
#[error(transparent)]
@@ -54,8 +51,10 @@ pub fn set_thread_priority(tid: u64, priority: Option<Priority>) -> Result<Prior
.make_thread_realtime(tid, priority.value())
.map(|_| priority)
.map_err(|e| match e {
zbus::fdo::Error::AccessDenied(_) => Error::PermissionDenied,
e => Error::ZbusMethodError(e),
zbus::fdo::Error::AccessDenied(err) => Error::PermissionDenied(err),
// NOTE: RTKit returns "No such file or directory" for invalid tids.
zbus::fdo::Error::Failed(err) if err == "No such file or directory" => Error::InvalidPidOrTid,
err => Error::ZbusMethodError(err),
})
}
@@ -84,8 +83,10 @@ pub fn set_process_thread_priority(
.make_thread_realtime_with_pid(pid, tid, priority.value())
.map(|_| priority)
.map_err(|e| match e {
zbus::fdo::Error::AccessDenied(_) => Error::PermissionDenied,
e => Error::ZbusMethodError(e),
zbus::fdo::Error::AccessDenied(err) => Error::PermissionDenied(err),
// NOTE: RTKit returns "No such file or directory" for invalid tids.
zbus::fdo::Error::Failed(err) if err == "No such file or directory" => Error::InvalidPidOrTid,
err => Error::ZbusMethodError(err),
})
}
@@ -118,8 +119,10 @@ pub fn set_thread_nice_level(tid: u64, nice_level: Option<NiceLevel>) -> Result<
.make_thread_high_priority(tid, nice_level.value())
.map(|_| nice_level)
.map_err(|e| match e {
zbus::fdo::Error::AccessDenied(_) => Error::PermissionDenied,
e => Error::ZbusMethodError(e),
zbus::fdo::Error::AccessDenied(err) => Error::PermissionDenied(err),
// NOTE: RTKit returns "No such file or directory" for invalid tids.
zbus::fdo::Error::Failed(err) if err == "No such file or directory" => Error::InvalidPidOrTid,
err => Error::ZbusMethodError(err),
})
}
@@ -148,7 +151,9 @@ pub fn set_process_thread_nice_level(
.make_thread_high_priority_with_pid(pid, tid, nice_level.value())
.map(|_| nice_level)
.map_err(|e| match e {
zbus::fdo::Error::AccessDenied(_) => Error::PermissionDenied,
e => Error::ZbusMethodError(e),
zbus::fdo::Error::AccessDenied(err) => Error::PermissionDenied(err),
// NOTE: RTKit returns "No such file or directory" for invalid tids.
zbus::fdo::Error::Failed(err) if err == "No such file or directory" => Error::InvalidPidOrTid,
err => Error::ZbusMethodError(err),
})
}