klauthed-observability 0.7.0

Observability for klauthed: tracing spans, metrics, and OpenTelemetry wiring.
Documentation
use klauthed_macros::DomainError;

/// Errors raised while initializing telemetry.
///
/// The `DomainError` impl (category/code) is generated by the derive: every
/// variant is `internal`, with codes `observability.<snake_variant>`.
#[derive(Debug, DomainError)]
#[domain(prefix = "observability", category = "internal")]
#[non_exhaustive]
pub enum ObservabilityError {
    /// A global subscriber/recorder was already installed in this process.
    AlreadyInitialized,
    /// Building or installing the tracing subscriber failed.
    Subscriber(String),
    /// Installing the metrics recorder failed.
    #[cfg(feature = "metrics")]
    Metrics(String),
    /// Building the OpenTelemetry exporter/pipeline failed.
    #[cfg(feature = "otel")]
    Otel(String),
}

impl std::fmt::Display for ObservabilityError {
    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
        match self {
            ObservabilityError::AlreadyInitialized => {
                f.write_str("telemetry has already been initialized in this process")
            }
            ObservabilityError::Subscriber(msg) => write!(f, "subscriber init failed: {msg}"),
            #[cfg(feature = "metrics")]
            ObservabilityError::Metrics(msg) => write!(f, "metrics init failed: {msg}"),
            #[cfg(feature = "otel")]
            ObservabilityError::Otel(msg) => write!(f, "opentelemetry init failed: {msg}"),
        }
    }
}

impl std::error::Error for ObservabilityError {}