omni_dev/datadog/
error.rs1use thiserror::Error;
4
5#[derive(Error, Debug)]
7pub enum DatadogError {
8 #[error("Datadog credentials not configured. Run `omni-dev datadog auth login`")]
10 CredentialsNotFound,
11
12 #[error("Datadog API request failed: HTTP {status}: {body}")]
14 ApiRequestFailed {
15 status: u16,
17 body: String,
20 },
21
22 #[error("Invalid Datadog site: {0}")]
24 InvalidSite(String),
25
26 #[error("Invalid time range: {0}")]
28 InvalidTimeRange(String),
29}
30
31#[cfg(test)]
32mod tests {
33 use super::*;
34
35 #[test]
36 fn credentials_not_found_display() {
37 let err = DatadogError::CredentialsNotFound;
38 assert!(err.to_string().contains("not configured"));
39 assert!(err.to_string().contains("datadog auth login"));
40 }
41
42 #[test]
43 fn api_request_failed_display() {
44 let err = DatadogError::ApiRequestFailed {
45 status: 401,
46 body: "Unauthorized".to_string(),
47 };
48 let msg = err.to_string();
49 assert!(msg.contains("401"));
50 assert!(msg.contains("Unauthorized"));
51 }
52
53 #[test]
54 fn invalid_site_display() {
55 let err = DatadogError::InvalidSite("weird.example".to_string());
56 assert!(err.to_string().contains("weird.example"));
57 }
58
59 #[test]
60 fn invalid_time_range_display() {
61 let err = DatadogError::InvalidTimeRange("1h30m".to_string());
62 assert!(err.to_string().contains("1h30m"));
63 }
64}