1use std::result;
2use thiserror::Error;
3
4#[derive(Error, Debug)]
5pub enum Error {
6 #[error("{0}")]
7 UninitializedFieldError(&'static str),
8
9 #[error("{0}")]
10 SerdeJsonError(#[from] serde_json::Error),
11
12 #[error("{0}")]
13 SerdePlainError(#[from] serde_plain::Error),
14
15 #[error("{0}")]
16 StdFmtError(#[from] std::fmt::Error),
17}
18
19impl From<derive_builder::UninitializedFieldError> for Error {
20 fn from(e: derive_builder::UninitializedFieldError) -> Self {
21 Self::UninitializedFieldError(e.field_name())
22 }
23}
24
25pub type Result<T> = result::Result<T, serde_json::Error>;
27
28#[cfg(test)]
29mod tests {
30 use super::*;
31
32 #[test]
33 fn test_uninitialized_field_error() {
34 let err = Error::UninitializedFieldError("test_field");
35 assert_eq!(err.to_string(), "test_field");
36 }
37
38 #[test]
39 fn test_serde_json_error() {
40 let json_err = serde_json::from_str::<serde_json::Value>("invalid json");
41 assert!(json_err.is_err());
42 let err: Error = json_err.unwrap_err().into();
43 assert!(err.to_string().contains("expected value"));
44 }
45
46 #[test]
47 fn test_serde_plain_error() {
48 use serde::de::Error as _;
49 let plain_err = serde_plain::Error::custom("custom error");
50 let err: Error = plain_err.into();
51 assert_eq!(err.to_string(), "custom error");
52 }
53
54 #[test]
55 fn test_from_builder_uninitialized_field_error() {
56 use derive_builder::UninitializedFieldError;
57 let builder_err = UninitializedFieldError::new("field_name");
58 let err: Error = builder_err.into();
59 assert_eq!(err.to_string(), "field_name");
60 }
61}