1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
use crateErrorKind;
use Serialize;
/// Trait representing a structured error with categorized information.
///
/// The `AsError` trait provides a standardized way to define and retrieve
/// detailed error information, including its kind, message, classification,
/// and additional details.
///
/// Implementing this trait allows for better error management and debugging
/// by ensuring consistency in error structures.
///
/// A structured error type with categorized information.
///
/// The `Error` struct represents an error with a specific kind, classification,
/// message, and optional additional details.
///
/// This structure is designed to facilitate error handling by providing
/// detailed information that can be logged or displayed.
///
/// Converts any type implementing `AsError` into an `Error` instance.
///
/// This implementation allows seamless conversion from custom error types
/// that implement `AsError` into the `Error` struct, preserving structured
/// error information.
///
/// # Type Parameters
/// - `E`: A type that implements the `AsError` trait.
///
/// # Example
/// ```rust
/// let custom_error = MyCustomError::new();
/// let error: Error = custom_error.into();
/// ```
/// Converts an `Error` into a `std::io::Error`.
///
/// This implementation maps an `Error` to an `std::io::Error` using the
/// `InvalidData` error kind and formats the error message accordingly.
/// This allows for seamless integration with Rust's standard I/O error handling.
///
/// # Example
/// ```rust
/// let custom_error = Error::new(...);
/// let io_error: std::io::Error = custom_error.into();
/// ```
/// Implements the `Display` trait for `Error`.
///
/// This implementation formats the error as a human-readable string,
/// including its kind, class, code, and message. It provides a structured
/// error output that can be useful for logging or displaying errors in a UI.
///
/// # Format
/// ```text
/// [message_id] class (code) - message
/// ```
///
/// # Example
/// ```rust
/// let error = Error::new(...);
/// println!("{}", error);
/// ```