logid 0.12.2

Rust logging framework using IDs to identify log entries.
Documentation
use std::error::Error;

use logid::err;
use logid_core::{
    log_id::{LogId, LogLevel},
    logging::{event_entry::AddonKind, LOGGER},
    new_log_id,
};

#[derive(Debug, Clone, Copy)]
struct TestDummy {}

impl std::fmt::Display for TestDummy {
    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
        write!(f, "TestDummy")
    }
}

impl Error for TestDummy {}

impl From<TestDummy> for LogId {
    fn from(_value: TestDummy) -> Self {
        new_log_id!("TestDummy", LogLevel::Error)
    }
}

#[test]
fn add_single_info_for_err() {
    let dummy = TestDummy {};
    let info_msg = AddonKind::Info("Test".to_owned());

    let recv = LOGGER.subscribe(dummy.into()).unwrap();

    let _: Result<(), _> = err!(dummy, add: info_msg.clone());

    let event = recv
        .get_receiver()
        .recv_timeout(std::time::Duration::from_millis(10))
        .unwrap();

    let entry = event.get_entry();
    assert_eq!(
        entry.get_infos().len(),
        1,
        "Additional info was not added to entry"
    );
    assert_eq!(
        AddonKind::Info(entry.get_infos().first().unwrap().to_string()),
        info_msg,
        "Set additional info was not stored in the entry"
    );
}

#[test]
fn add_multiple_infos_for_err() {
    let dummy = TestDummy {};
    let info_msg = AddonKind::Info("Test".to_owned());

    let recv = LOGGER.subscribe(dummy.into()).unwrap();

    let _: Result<(), _> = err!(
        dummy,
        add: info_msg.clone(),
        add: info_msg.clone(),
        add: info_msg.clone()
    );

    let event = recv
        .get_receiver()
        .recv_timeout(std::time::Duration::from_millis(10))
        .unwrap();

    let entry = event.get_entry();
    assert_eq!(
        entry.get_infos().len(),
        3,
        "Additional info was not added to entry"
    );
    assert_eq!(
        AddonKind::Info(entry.get_infos().first().unwrap().to_string()),
        info_msg,
        "Set additional info was not stored in the entry"
    );
}