use std::io;
use thiserror::Error;
pub type SimpleLockResult<T> = std::result::Result<T, SimpleLockError>;
#[derive(Debug, Error, PartialEq, Eq, PartialOrd, Ord)]
pub enum SimpleLockError {
#[error("Lock is already locked!")]
AlreadyLocked,
#[error("Path or Name for lock was invalid!")]
InvalidName,
#[error("Unable to unlock, reason: {0}")]
UnableToUnlock(String),
#[error("Permission Denied!")]
PermissionDenied,
#[error("No lock implementation was enabled, unable to create a default lock.")]
NoLockEnabled,
#[error("Unknown Error: {0:?}")]
UnknownError(String),
}
impl From<io::Error> for SimpleLockError {
fn from(other: io::Error) -> Self {
other.kind().into()
}
}
impl From<io::ErrorKind> for SimpleLockError {
fn from(other: io::ErrorKind) -> Self {
match other {
io::ErrorKind::NotFound => SimpleLockError::InvalidName,
io::ErrorKind::PermissionDenied => SimpleLockError::PermissionDenied,
_ => SimpleLockError::UnknownError(format!("{:?}", other)),
}
}
}