rsdiff_core/error/
kinds.rs1pub use self::{external::*, propagation::*, standard::*, types::*};
6
7pub(crate) mod external;
8pub(crate) mod propagation;
9pub(crate) mod standard;
10pub(crate) mod types;
11
12use smart_default::SmartDefault;
13use strum::{Display, EnumCount, EnumDiscriminants, EnumIs, EnumIter, VariantNames};
14
15pub trait ErrorType {
16 type Kind: core::fmt::Display;
17
18 fn kind(&self) -> &Self::Kind;
19
20 fn name(&self) -> String;
21}
22
23#[derive(
24 Clone,
25 Copy,
26 Debug,
27 Display,
28 EnumCount,
29 EnumDiscriminants,
30 EnumIs,
31 EnumIter,
32 Eq,
33 Hash,
34 Ord,
35 PartialEq,
36 PartialOrd,
37 SmartDefault,
38 VariantNames,
39)]
40#[cfg_attr(
41 feature = "serde",
42 derive(serde::Deserialize, serde::Serialize,),
43 serde(rename_all = "snake_case")
44)]
45#[strum(serialize_all = "snake_case")]
46pub enum ErrorKind<E = String> {
47 #[default]
48 External(ExternalError<E>),
49 Sync(SyncError),
50}
51
52#[cfg(feature = "std")]
53impl<E> std::error::Error for ErrorKind<E> where E: core::fmt::Debug {}