cdp_core/
error.rs

1use thiserror::Error;
2
3/// Convenient result type alias used across the crate.
4pub type Result<T> = std::result::Result<T, CdpError>;
5
6/// Unified error type for the `cdp-core` crate.
7#[derive(Debug, Error)]
8pub enum CdpError {
9    #[error("Browser error: {message}")]
10    Browser { message: String },
11    #[error("Connection error: {message}")]
12    Connection { message: String },
13    #[error("Page error: {message}")]
14    Page { message: String },
15    #[error("Frame error: {message}")]
16    Frame { message: String },
17    #[error("Element error: {message}")]
18    Element { message: String },
19    #[error("Network error: {message}")]
20    Network { message: String },
21    #[error("Session error: {message}")]
22    Session { message: String },
23    #[error("Storage error: {message}")]
24    Storage { message: String },
25    #[error("Cookie error: {message}")]
26    Cookie { message: String },
27    #[error("Tooling error: {message}")]
28    Tool { message: String },
29    #[error("Protocol error: {message}")]
30    Protocol { message: String },
31    #[error("WebSocket resolution error: {message}")]
32    Ws { message: String },
33    #[error("IO error: {0}")]
34    Io(#[from] std::io::Error),
35    #[error("HTTP client error: {0}")]
36    Http(#[from] reqwest::Error),
37    #[error("WebSocket error: {0}")]
38    WebSocket(#[from] tokio_tungstenite::tungstenite::Error),
39    #[error("URL parse error: {0}")]
40    UrlParse(#[from] url::ParseError),
41    #[error("JSON processing error: {0}")]
42    Json(#[from] serde_json::Error),
43    #[error("Channel closed unexpectedly: {0}")]
44    ChannelClosed(#[from] tokio::sync::oneshot::error::RecvError),
45    #[error("Task join error: {0}")]
46    Join(#[from] tokio::task::JoinError),
47}
48
49impl CdpError {
50    pub fn browser(message: impl Into<String>) -> Self {
51        Self::Browser {
52            message: message.into(),
53        }
54    }
55
56    pub fn connection(message: impl Into<String>) -> Self {
57        Self::Connection {
58            message: message.into(),
59        }
60    }
61
62    pub fn page(message: impl Into<String>) -> Self {
63        Self::Page {
64            message: message.into(),
65        }
66    }
67
68    pub fn frame(message: impl Into<String>) -> Self {
69        Self::Frame {
70            message: message.into(),
71        }
72    }
73
74    pub fn element(message: impl Into<String>) -> Self {
75        Self::Element {
76            message: message.into(),
77        }
78    }
79
80    pub fn network(message: impl Into<String>) -> Self {
81        Self::Network {
82            message: message.into(),
83        }
84    }
85
86    pub fn session(message: impl Into<String>) -> Self {
87        Self::Session {
88            message: message.into(),
89        }
90    }
91
92    pub fn storage(message: impl Into<String>) -> Self {
93        Self::Storage {
94            message: message.into(),
95        }
96    }
97
98    pub fn cookie(message: impl Into<String>) -> Self {
99        Self::Cookie {
100            message: message.into(),
101        }
102    }
103
104    pub fn tool(message: impl Into<String>) -> Self {
105        Self::Tool {
106            message: message.into(),
107        }
108    }
109
110    pub fn protocol(message: impl Into<String>) -> Self {
111        Self::Protocol {
112            message: message.into(),
113        }
114    }
115
116    pub fn ws(message: impl Into<String>) -> Self {
117        Self::Ws {
118            message: message.into(),
119        }
120    }
121}