1#[derive(Debug, thiserror::Error)]
2pub enum ChipError {
3 #[error("HTTP request failed: {0}")]
4 Http(#[from] reqwest::Error),
5
6 #[error("API error {status}: {message}")]
7 Api { status: u16, message: String },
8
9 #[error("Missing required parameter: {0}")]
10 MissingParam(&'static str),
11
12 #[error("Signature verification failed")]
13 VerificationFailed,
14
15 #[error("Invalid configuration: {0}")]
16 Config(String),
17
18 #[error("JSON serialization error: {0}")]
19 Json(#[from] serde_json::Error),
20}
21
22#[cfg(test)]
23mod tests {
24 use super::*;
25
26 #[test]
27 fn chip_error_display_api_error() {
28 let err = ChipError::Api {
29 status: 400,
30 message: "Bad Request".into(),
31 };
32 assert_eq!(err.to_string(), "API error 400: Bad Request");
33 }
34
35 #[test]
36 fn chip_error_display_missing_param() {
37 let err = ChipError::MissingParam("brand_id");
38 assert_eq!(err.to_string(), "Missing required parameter: brand_id");
39 }
40
41 #[test]
42 fn chip_error_display_config() {
43 let err = ChipError::Config("base_url is required".into());
44 assert_eq!(
45 err.to_string(),
46 "Invalid configuration: base_url is required"
47 );
48 }
49
50 #[test]
51 fn chip_error_display_verification_failed() {
52 let err = ChipError::VerificationFailed;
53 assert_eq!(err.to_string(), "Signature verification failed");
54 }
55}