rsdiff_core/error/
kinds.rs

1/*
2    Appellation: kinds <module>
3    Contrib: FL03 <jo3mccain@icloud.com>
4*/
5pub 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 {}