use thiserror::Error;
#[derive(Error, Debug)]
pub enum Error {
#[error("ステートマシンエラー: {0}")]
StateError(#[from] crate::Error),
#[error("JSONエラー: {0}")]
JsonError(#[from] serde_json::Error),
#[error("ロック取得に失敗しました")]
LockError,
#[error("{0}")]
Other(String),
}
pub type Result<T> = std::result::Result<T, Error>;
impl From<String> for Error {
fn from(err: String) -> Self {
Error::Other(err)
}
}
impl From<&str> for Error {
fn from(err: &str) -> Self {
Error::Other(err.to_string())
}
}
pub trait LockResultExt<T> {
fn lock_err(self) -> Result<T>;
}
impl<T, E> LockResultExt<T> for std::result::Result<T, E>
where
E: std::fmt::Debug,
{
fn lock_err(self) -> Result<T> {
self.map_err(|_| Error::LockError)
}
}