1use std::io;
4use thiserror::Error;
5
6#[derive(Error, Debug)]
8pub enum Error {
9 #[error("File not found: {0}")]
11 NotFound(String),
12
13 #[error("Permission denied: {0}")]
15 PermissionDenied(String),
16
17 #[error("IO error: {0}")]
19 Io(#[from] io::Error),
20
21 #[error("Invalid path: {0}")]
23 InvalidPath(String),
24
25 #[error("Disk not configured: {0}")]
27 DiskNotConfigured(String),
28
29 #[cfg(feature = "s3")]
31 #[error("S3 error: {0}")]
32 S3(String),
33
34 #[error("Not implemented: {0}")]
36 NotImplemented(String),
37
38 #[error("Serialization error: {0}")]
40 Serialization(String),
41}
42
43impl Error {
44 pub fn not_found(path: impl Into<String>) -> Self {
46 Self::NotFound(path.into())
47 }
48
49 pub fn permission_denied(msg: impl Into<String>) -> Self {
51 Self::PermissionDenied(msg.into())
52 }
53
54 pub fn invalid_path(path: impl Into<String>) -> Self {
56 Self::InvalidPath(path.into())
57 }
58
59 pub fn disk_not_configured(disk: impl Into<String>) -> Self {
61 Self::DiskNotConfigured(disk.into())
62 }
63
64 pub fn not_implemented(feature: impl Into<String>) -> Self {
66 Self::NotImplemented(feature.into())
67 }
68}