1use std::fmt::Display;
2
3mod hash;
4mod metadata;
5mod strip_prefix;
6mod traverse;
7mod walkdir_metadata;
8
9pub use hash::HashError;
10pub use metadata::MetadataError;
11pub use strip_prefix::StripPrefixError;
12pub use traverse::TraverseError;
13pub use walkdir_metadata::WalkDirMetadataError;
14
15#[derive(Debug)]
17pub enum Error {
18    Traverse(TraverseError),
20    Metadata(MetadataError),
22    WalkDirMetadata(WalkDirMetadataError),
25    Hash(HashError),
27    StripPrefix(StripPrefixError),
29}
30
31pub type Result<T> = std::result::Result<T, Error>;
33
34impl Display for Error {
35    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
36        match self {
37            Error::Traverse(inner) => inner.fmt(f),
38            Error::Metadata(inner) => inner.fmt(f),
39            Error::WalkDirMetadata(inner) => inner.fmt(f),
40            Error::Hash(inner) => inner.fmt(f),
41            Error::StripPrefix(inner) => inner.fmt(f),
42        }
43    }
44}
45
46impl std::error::Error for Error {
47    fn source(&self) -> Option<&(dyn std::error::Error + 'static)> {
48        match self {
49            Error::Traverse(inner) => inner.source(),
50            Error::Metadata(inner) => inner.source(),
51            Error::WalkDirMetadata(inner) => inner.source(),
52            Error::Hash(inner) => inner.source(),
53            Error::StripPrefix(inner) => inner.source(),
54        }
55    }
56}
57
58impl From<TraverseError> for Error {
59    fn from(value: TraverseError) -> Self {
60        Self::Traverse(value)
61    }
62}
63
64impl From<MetadataError> for Error {
65    fn from(value: MetadataError) -> Self {
66        Self::Metadata(value)
67    }
68}
69
70impl From<WalkDirMetadataError> for Error {
71    fn from(value: WalkDirMetadataError) -> Self {
72        Self::WalkDirMetadata(value)
73    }
74}
75
76impl From<HashError> for Error {
77    fn from(value: HashError) -> Self {
78        Self::Hash(value)
79    }
80}
81
82impl From<StripPrefixError> for Error {
83    fn from(value: StripPrefixError) -> Self {
84        Self::StripPrefix(value)
85    }
86}