foundations 5.7.1

A Rust service foundations library.
Documentation
use std::sync::{Arc, Mutex};

use foundations::telemetry::TestTelemetryContext;
use foundations::telemetry::log::error;
use foundations::telemetry::settings::LoggingSettings;
use slog::{Drain, Never, OwnedKVList, Record};

struct CapturingDrain {
    messages: Arc<Mutex<Vec<String>>>,
}

impl Drain for CapturingDrain {
    type Ok = ();
    type Err = Never;

    fn log(&self, record: &Record, _: &OwnedKVList) -> Result<(), Never> {
        self.messages
            .lock()
            .unwrap()
            .push(format!("{}", record.msg()));
        Ok(())
    }
}

#[foundations::telemetry::with_test_telemetry(test)]
fn custom_drain_receives_log_records(mut ctx: TestTelemetryContext) {
    let messages = Arc::new(Mutex::new(Vec::new()));
    let drain = CapturingDrain {
        messages: Arc::clone(&messages),
    };

    ctx.set_custom_log_drain(LoggingSettings::default(), Arc::new(drain));

    error!("hello from custom drain");

    let msgs = messages.lock().unwrap();
    assert!(
        msgs.iter().any(|m| m.contains("hello from custom drain")),
        "custom drain did not receive the expected log record; got: {msgs:?}"
    );
}