1use std::io;
2
3use thiserror::Error;
4
5use crate::{RwLockReadGuard, RwLockWriteGuard};
6
7#[derive(Debug, Error)]
8pub struct LockError<T> {
9 pub file: T,
10 #[source]
11 pub error: io::Error,
12}
13
14impl<T> LockError<T> {
15 pub fn new(file: T, error: io::Error) -> Self {
16 Self { file, error }
17 }
18}
19
20impl<T> From<LockError<T>> for io::Error {
21 fn from(value: LockError<T>) -> Self {
22 value.error
23 }
24}
25
26impl<T> From<LockError<T>> for (T, io::Error) {
27 fn from(value: LockError<T>) -> Self {
28 (value.file, value.error)
29 }
30}
31
32pub type LockReadResult<T> = Result<RwLockReadGuard<T>, LockError<T>>;
33pub type LockWriteResult<T> = Result<RwLockWriteGuard<T>, LockError<T>>;