use thiserror::Error;
#[derive(Error, Debug)]
pub enum RnkError {
#[error("Lock poisoned: {context}")]
LockPoisoned {
context: &'static str,
},
#[error("Hook context not available: {0}")]
NoHookContext(&'static str),
#[error("IO error: {0}")]
Io(#[from] std::io::Error),
#[error("Layout error: {0}")]
Layout(String),
#[error("Render error: {0}")]
Render(String),
}
pub type Result<T> = std::result::Result<T, RnkError>;
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_error_display() {
let err = RnkError::LockPoisoned {
context: "signal value",
};
assert_eq!(err.to_string(), "Lock poisoned: signal value");
let err = RnkError::NoHookContext("use_signal");
assert_eq!(err.to_string(), "Hook context not available: use_signal");
}
#[test]
fn test_io_error_conversion() {
let io_err = std::io::Error::new(std::io::ErrorKind::NotFound, "file not found");
let rnk_err: RnkError = io_err.into();
assert!(matches!(rnk_err, RnkError::Io(_)));
}
}