diff_trees/error/
mod.rs

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/// An error encountered while diffing two paths.
16#[derive(Debug)]
17pub enum Error {
18    /// An error encountered while traversing the directory trees.
19    Traverse(TraverseError),
20    /// An error encountered while accessing a [`Path`]'s [`Path::metadata`].
21    Metadata(MetadataError),
22    /// An error encountered while accessing a [`Path`]'s [`Path::metadata`] while walking a
23    /// directory tree.
24    WalkDirMetadata(WalkDirMetadataError),
25    /// An error encountered while hashing a file to determine if it changed.
26    Hash(HashError),
27    /// An error encountered while removing a prefix from a [`Path`].
28    StripPrefix(StripPrefixError),
29}
30
31/// A [`std::result::Result`] produced by diffing two paths.
32pub 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}