shared-context-engineering 0.3.1

Shared Context Engineering CLI
use crate::services::error::ClassifiedError;

pub trait Logger: Send + Sync {
    fn info(&self, event_id: &str, message: &str, fields: &[(&str, &str)]);

    fn debug(&self, event_id: &str, message: &str, fields: &[(&str, &str)]);

    fn warn(&self, event_id: &str, message: &str, fields: &[(&str, &str)]);

    fn error(&self, event_id: &str, message: &str, fields: &[(&str, &str)]);

    fn log_classified_error(&self, error: &ClassifiedError);
}

pub trait Telemetry: Send + Sync {
    fn with_default_subscriber(
        &self,
        action: &mut dyn FnMut() -> Result<String, ClassifiedError>,
    ) -> Result<String, ClassifiedError>;
}

#[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
#[allow(dead_code)]
pub struct NoopLogger;

impl Logger for NoopLogger {
    fn info(&self, _event_id: &str, _message: &str, _fields: &[(&str, &str)]) {}

    fn debug(&self, _event_id: &str, _message: &str, _fields: &[(&str, &str)]) {}

    fn warn(&self, _event_id: &str, _message: &str, _fields: &[(&str, &str)]) {}

    fn error(&self, _event_id: &str, _message: &str, _fields: &[(&str, &str)]) {}

    fn log_classified_error(&self, _error: &ClassifiedError) {}
}

impl Logger for super::Logger {
    fn info(&self, event_id: &str, message: &str, fields: &[(&str, &str)]) {
        super::Logger::info(self, event_id, message, fields);
    }

    fn debug(&self, event_id: &str, message: &str, fields: &[(&str, &str)]) {
        super::Logger::debug(self, event_id, message, fields);
    }

    fn warn(&self, event_id: &str, message: &str, fields: &[(&str, &str)]) {
        super::Logger::warn(self, event_id, message, fields);
    }

    fn error(&self, event_id: &str, message: &str, fields: &[(&str, &str)]) {
        super::Logger::error(self, event_id, message, fields);
    }

    fn log_classified_error(&self, error: &ClassifiedError) {
        super::Logger::log_classified_error(self, error);
    }
}

#[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
pub struct NoopTelemetry;

impl Telemetry for NoopTelemetry {
    fn with_default_subscriber(
        &self,
        action: &mut dyn FnMut() -> Result<String, ClassifiedError>,
    ) -> Result<String, ClassifiedError> {
        action()
    }
}