logid 0.12.2

Rust logging framework using IDs to identify log entries.
Documentation
#[cfg(feature = "fmt")]
mod fmt_tests {
    use std::error::Error;

    use logid::{err, log, pipe};
    use logid_core::{
        evident::event::entry::EventEntry,
        info_addon,
        log_id::{LogId, LogLevel},
        logging::LOGGER,
        new_log_id,
    };
    use serde::{Deserialize, Serialize};

    #[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)
        }
    }

    #[derive(Serialize, Deserialize)]
    struct MsgData {
        val: String,
    }

    fn fmt_msg(data: &serde_json::Value) -> String {
        data.to_string()
    }

    #[test]
    fn log_with_fmt_msg() {
        let dummy = TestDummy {};
        let test_data = MsgData {
            val: "Log".to_string(),
        };

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

        let ser: serde_json::Value = serde_json::to_value(test_data).unwrap();
        log!(dummy, fmt_msg, ser.clone());

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

        let entry = event.get_entry();
        assert_eq!(
            entry.get_msg().unwrap(),
            &fmt_msg(&ser),
            "Formatted msg was not stored in the entry"
        );
    }

    #[test]
    fn err_with_fmt_msg() {
        let dummy = TestDummy {};
        let test_data = MsgData {
            val: "Error".to_string(),
        };

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

        let ser: serde_json::Value = serde_json::to_value(test_data).unwrap();
        let _: Result<(), _> = err!(dummy, fmt_msg, ser.clone());

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

        let entry = event.get_entry();
        assert_eq!(
            entry.get_msg().unwrap(),
            &fmt_msg(&ser),
            "Formatted msg was not stored in the entry"
        );
    }

    #[test]
    fn pipe_with_fmt_msg() {
        let dummy = TestDummy {};
        let test_data = MsgData {
            val: "Pipe".to_string(),
        };

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

        let ser: serde_json::Value = serde_json::to_value(test_data).unwrap();
        let _ = pipe!(dummy, fmt_msg, ser.clone());

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

        let entry = event.get_entry();
        assert_eq!(
            entry.get_msg().unwrap(),
            &fmt_msg(&ser),
            "Formatted msg was not stored in the entry"
        );
    }

    #[test]
    fn log_with_fmt_info_addon() {
        let dummy = TestDummy {};
        let test_data = MsgData {
            val: "InfoAddon".to_string(),
        };

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

        let ser: serde_json::Value = serde_json::to_value(test_data).unwrap();
        log!(dummy, "dummy msg", add: info_addon!(fmt_msg, ser.clone()));

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

        let entry = event.get_entry();
        assert_eq!(
            entry.get_fmt_infos().first().unwrap().to_string(),
            fmt_msg(&ser),
            "Formatted info addon was not stored in the entry"
        );
    }
}