use thiserror::Error;
#[derive(Debug, Clone, PartialEq, Eq, Error)]
#[non_exhaustive]
pub enum TelemetryError {
#[error("telemetry init failed: {0}")]
InitFailed(String),
#[error("telemetry already initialized: the global subscriber is installed once per process")]
AlreadyInitialized,
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn display_is_informative() {
let e = TelemetryError::InitFailed("invalid directive".into());
assert_eq!(e.to_string(), "telemetry init failed: invalid directive");
assert_eq!(
TelemetryError::AlreadyInitialized.to_string(),
"telemetry already initialized: the global subscriber is installed once per process"
);
}
#[test]
fn is_std_error_with_source_none() {
let e = TelemetryError::InitFailed("boom".into());
let std_err: &dyn std::error::Error = &e;
assert!(std_err.to_string().contains("boom"));
assert!(std_err.source().is_none());
}
#[test]
fn debug_and_clone_round_trip() {
let e = TelemetryError::InitFailed("a".into());
let cloned = e.clone();
assert_eq!(format!("{e:?}"), r#"InitFailed("a")"#);
assert_eq!(e, cloned);
assert_ne!(e, TelemetryError::AlreadyInitialized);
}
}