calimero_client/
errors.rs1use serde::Serialize;
7use thiserror::Error;
8
9#[derive(Debug, Error, Serialize)]
11pub enum ClientError {
12 #[error("Network error: {message}")]
14 Network { message: String },
15
16 #[error("Authentication error: {message}")]
18 Authentication { message: String },
19
20 #[error("Storage error: {message}")]
22 Storage { message: String },
23
24 #[error("Internal error: {message}")]
26 Internal { message: String },
27}
28
29impl From<reqwest::Error> for ClientError {
31 fn from(err: reqwest::Error) -> Self {
32 if err.is_timeout() {
33 ClientError::Network {
34 message: "Request timeout".to_owned(),
35 }
36 } else if err.is_connect() {
37 ClientError::Network {
38 message: format!("Connection failed: {}", err),
39 }
40 } else if err.is_status() {
41 if let Some(status) = err.status() {
42 ClientError::Network {
43 message: format!("HTTP {}: {}", status.as_u16(), err),
44 }
45 } else {
46 ClientError::Network {
47 message: format!("HTTP error: {}", err),
48 }
49 }
50 } else {
51 ClientError::Network {
52 message: format!("Network error: {}", err),
53 }
54 }
55 }
56}
57
58impl From<serde_json::Error> for ClientError {
59 fn from(err: serde_json::Error) -> Self {
60 ClientError::Internal {
61 message: format!("Serialization error: {}", err),
62 }
63 }
64}
65
66impl From<std::io::Error> for ClientError {
67 fn from(err: std::io::Error) -> Self {
68 match err.kind() {
69 std::io::ErrorKind::NotFound => ClientError::Storage {
70 message: "File not found".to_owned(),
71 },
72 std::io::ErrorKind::PermissionDenied => ClientError::Storage {
73 message: "Permission denied".to_owned(),
74 },
75 _ => ClientError::Storage {
76 message: format!("IO error: {}", err),
77 },
78 }
79 }
80}
81
82impl From<url::ParseError> for ClientError {
83 fn from(err: url::ParseError) -> Self {
84 ClientError::Network {
85 message: format!("Invalid URL: {}", err),
86 }
87 }
88}