Skip to main content

g_err/
types.rs

1use core::fmt::{Debug, Display};
2
3use crate::gerr::Config;
4
5/// Type representing no id.
6#[derive(Debug, PartialEq, Eq)]
7pub struct NoID;
8
9impl Display for NoID {
10    fn fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result {
11        write!(f, "NoID")
12    }
13}
14
15#[cfg(feature = "serde")]
16impl ::serde::Serialize for NoID {
17    fn serialize<S>(&self, serializer: S) -> core::result::Result<S::Ok, S::Error>
18    where
19        S: serde::Serializer,
20    {
21        serializer.serialize_unit()
22    }
23}
24
25#[cfg(feature = "serde")]
26impl<'de> ::serde::Deserialize<'de> for NoID {
27    fn deserialize<D>(deserializer: D) -> core::result::Result<Self, D::Error>
28    where
29        D: serde::Deserializer<'de>,
30    {
31        <()>::deserialize(deserializer)?;
32        Ok(NoID)
33    }
34}
35
36/// Type for generic parameter `D` for GErr without data.
37#[derive(Debug, PartialEq, Eq)]
38pub struct NoData;
39
40#[cfg(feature = "serde")]
41impl ::serde::Serialize for NoData {
42    fn serialize<S>(&self, serializer: S) -> core::result::Result<S::Ok, S::Error>
43    where
44        S: serde::Serializer,
45    {
46        serializer.serialize_unit()
47    }
48}
49
50#[cfg(feature = "serde")]
51impl<'de> ::serde::Deserialize<'de> for NoData {
52    fn deserialize<D>(deserializer: D) -> core::result::Result<Self, D::Error>
53    where
54        D: serde::Deserializer<'de>,
55    {
56        <()>::deserialize(deserializer)?;
57        Ok(NoData)
58    }
59}
60
61/// Default [`Config`] implementation.
62///
63/// Config:
64/// - `Id`: [`NoID`]
65/// - `id()`: returns `None`
66/// - `Code`: `None`
67pub struct DefaultConfig;
68
69impl Config for DefaultConfig {
70    type Id = NoID;
71}
72
73impl Config for () {
74    type Id = NoID;
75}