iab_specs/
errors.rs

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
25/// Alias for a `Result` with the error type `iab_specs::Error`.
26pub 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}