1use thiserror::Error;
4
5pub type ProbarResult<T> = Result<T, ProbarError>;
7
8#[derive(Debug, Error)]
10pub enum ProbarError {
11 #[error("Browser not found. Install Chromium or set CHROMIUM_PATH")]
13 BrowserNotFound,
14
15 #[error("Failed to launch browser: {message}")]
17 BrowserLaunchError {
18 message: String,
20 },
21
22 #[error("Failed to connect to browser: {message}")]
24 ConnectionFailed {
25 message: String,
27 },
28
29 #[error("Page error: {message}")]
31 PageError {
32 message: String,
34 },
35
36 #[error("Navigation to {url} failed: {message}")]
38 NavigationError {
39 url: String,
41 message: String,
43 },
44
45 #[error("Operation timed out after {ms}ms")]
47 Timeout {
48 ms: u64,
50 },
51
52 #[error("Timeout: {message}")]
54 TimeoutError {
55 message: String,
57 },
58
59 #[error("WASM evaluation failed: {message}")]
61 WasmError {
62 message: String,
64 },
65
66 #[error("Input simulation failed: {message}")]
68 InputError {
69 message: String,
71 },
72
73 #[error("Screenshot failed: {message}")]
75 ScreenshotError {
76 message: String,
78 },
79
80 #[error("Element not found: {selector} - {message}")]
82 ElementNotFound {
83 selector: String,
85 message: String,
87 },
88
89 #[error("Assertion failed: {message}")]
91 AssertionFailed {
92 message: String,
94 },
95
96 #[error("Assertion error: {message}")]
98 AssertionError {
99 message: String,
101 },
102
103 #[error("Snapshot mismatch: {name} differs by {difference:.2}%")]
105 SnapshotMismatch {
106 name: String,
108 difference: f64,
110 },
111
112 #[error("Navigation failed: {url}")]
114 NavigationFailed {
115 url: String,
117 },
118
119 #[error("Image comparison failed: {message}")]
121 ImageComparisonError {
122 message: String,
124 },
125
126 #[error("Image processing failed: {message}")]
128 ImageProcessing {
129 message: String,
131 },
132
133 #[error("Invalid state: {message}")]
135 InvalidState {
136 message: String,
138 },
139
140 #[error("Video recording failed: {message}")]
142 VideoRecording {
143 message: String,
145 },
146
147 #[error("Fixture error: {message}")]
149 FixtureError {
150 message: String,
152 },
153
154 #[error("I/O error: {0}")]
156 Io(#[from] std::io::Error),
157
158 #[error("JSON error: {0}")]
160 Json(#[from] serde_json::Error),
161
162 #[error("TUI error: {message}")]
164 TuiError {
165 message: String,
167 },
168
169 #[error("Snapshot serialization error: {message}")]
171 SnapshotSerializationError {
172 message: String,
174 },
175
176 #[error("HTML generation error: {0}")]
178 HtmlGeneration(String),
179
180 #[error("CSS generation error: {0}")]
182 CssGeneration(String),
183
184 #[error("JavaScript generation error: {0}")]
186 JsGeneration(String),
187
188 #[error("Web validation error: {0}")]
190 WebValidation(String),
191
192 #[error("Pixel coverage error: {0}")]
194 PixelCoverage(String),
195
196 #[error("Performance tracing error: {0}")]
198 PerformanceTracing(String),
199
200 #[error("WASM runner error: {0}")]
202 WasmRunner(String),
203
204 #[error("Serialization error: {message}")]
206 SerializationError {
207 message: String,
209 },
210
211 #[error("AV sync error: {message}")]
213 AvSyncError {
214 message: String,
216 },
217
218 #[error("ffmpeg error: {message}")]
220 FfmpegError {
221 message: String,
223 },
224}