1use thiserror::Error;
10
11#[derive(Error, Debug)]
13pub enum CbtopError {
14 #[error("Terminal error: {0}")]
16 Terminal(#[from] std::io::Error),
17
18 #[error("Configuration error: {0}")]
20 Config(String),
21
22 #[error("I/O error: {0}")]
24 Io(String),
25
26 #[error("Brick verification failed: {brick_name} - {reason}")]
28 BrickVerification { brick_name: String, reason: String },
29
30 #[error("Collector error: {0}")]
32 Collector(#[from] CollectorError),
33
34 #[error("Load generator error: {0}")]
36 LoadGenerator(#[from] LoadError),
37
38 #[error("No GPU available")]
40 NoGpu,
41
42 #[error("Invalid device index: {0}")]
44 InvalidDevice(u32),
45
46 #[error("Budget exceeded: {phase} took {elapsed_ms}ms (budget: {budget_ms}ms)")]
48 BudgetExceeded {
49 phase: String,
50 elapsed_ms: u64,
51 budget_ms: u32,
52 },
53
54 #[error("Render error: {0}")]
56 Render(String),
57}
58
59#[derive(Error, Debug)]
61pub enum CollectorError {
62 #[error("Failed to read /proc: {0}")]
64 ProcFs(String),
65
66 #[error("Failed to read sysfs: {0}")]
68 SysFs(String),
69
70 #[error("NVML error: {0}")]
72 Nvml(String),
73
74 #[error("wgpu error: {0}")]
76 Wgpu(String),
77
78 #[error("Data source not available: {0}")]
80 NotAvailable(String),
81
82 #[error("Parse error: {0}")]
84 Parse(String),
85}
86
87#[derive(Error, Debug)]
89pub enum LoadError {
90 #[error("Backend not available: {0}")]
92 BackendNotAvailable(String),
93
94 #[error("Allocation failed: {0}")]
96 AllocationFailed(String),
97
98 #[error("Kernel launch failed: {0}")]
100 KernelLaunchFailed(String),
101
102 #[error("Synchronization failed: {0}")]
104 SyncFailed(String),
105
106 #[error("Invalid configuration: {0}")]
108 InvalidConfig(String),
109}
110
111pub type Result<T> = std::result::Result<T, CbtopError>;