1use thiserror::Error;
2
3pub type Result<T> = std::result::Result<T, CdpError>;
5
6#[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}