use std::panic::{RefUnwindSafe, UnwindSafe};
#[ohno::error]
#[display("invalid cpulist syntax: '{invalid_value}' is invalid: {problem}")]
pub struct Error {
invalid_value: String,
problem: String,
}
impl UnwindSafe for Error {}
impl RefUnwindSafe for Error {}
impl Error {
#[must_use]
pub fn invalid_value(&self) -> &str {
&self.invalid_value
}
#[must_use]
pub fn problem(&self) -> &str {
&self.problem
}
}
pub(crate) type Result<T> = std::result::Result<T, Error>;
#[cfg(test)]
#[cfg_attr(coverage_nightly, coverage(off))]
mod tests {
use std::error;
use std::fmt::Debug;
use std::panic::{RefUnwindSafe, UnwindSafe};
use static_assertions::assert_impl_all;
use super::*;
assert_impl_all!(Error: Send, Sync, Debug, error::Error, UnwindSafe, RefUnwindSafe);
#[test]
fn invalid_syntax_is_error() {
let error = Error::new("abc".to_string(), "not a number".to_string());
assert_eq!(error.invalid_value(), "abc");
assert_eq!(error.problem(), "not a number");
let result: Result<()> = Err(error);
assert!(result.is_err());
}
}