errs 0.8.2

A library for handling errors with reasons
Documentation
#[cfg(test)]
mod tests_of_notification {
    use std::sync::{LazyLock, Mutex};

    static LOGGER: LazyLock<Mutex<(Vec<String>, Vec<String>)>> =
        LazyLock::new(|| Mutex::new((Vec::new(), Vec::new())));

    #[cfg(feature = "notify")]
    errs::add_sync_err_handler!(|err, _tm| {
        LOGGER
            .lock()
            .unwrap()
            .0
            .push(format!("[global sync] {err:?}"));
    });

    #[derive(Debug)]
    enum Reasons {
        FailToDoSomething,
    }

    #[cfg(feature = "notify")]
    const BASE_LINE: u32 = line!();

    #[test]
    fn test() {
        #[cfg(feature = "notify")]
        let _ = errs::add_sync_err_handler(|err, _| {
            LOGGER
                .lock()
                .unwrap()
                .0
                .push(format!("[local sync] {err:?}"));
        });

        let _err = errs::Err::new(Reasons::FailToDoSomething);

        #[cfg(feature = "notify")]
        {
            let logs = &LOGGER.lock().unwrap().0;
            assert_eq!(logs.len(), 2);
            #[cfg(unix)]
            {
                assert_eq!(logs[0], format!("[global sync] errs::Err {{ reason = sync_handler_registration_order_test::tests_of_notification::Reasons FailToDoSomething, file = tests/sync_handler_registration_order_test.rs, line = {} }}", BASE_LINE + 13));
                assert_eq!(logs[1], format!("[local sync] errs::Err {{ reason = sync_handler_registration_order_test::tests_of_notification::Reasons FailToDoSomething, file = tests/sync_handler_registration_order_test.rs, line = {} }}", BASE_LINE + 13));
            }
            #[cfg(windows)]
            {
                assert_eq!(logs[0], format!("[global sync] errs::Err {{ reason = sync_handler_registration_order_test::tests_of_notification::Reasons FailToDoSomething, file = tests\\sync_handler_registration_order_test.rs, line = {} }}", BASE_LINE + 13));
                assert_eq!(logs[1], format!("[local sync] errs::Err {{ reason = sync_handler_registration_order_test::tests_of_notification::Reasons FailToDoSomething, file = tests\\sync_handler_registration_order_test.rs, line = {} }}", BASE_LINE + 13));
            }
        }
        #[cfg(not(feature = "notify"))]
        {
            let logs = &LOGGER.lock().unwrap().0;
            assert_eq!(logs.len(), 0);
        }
    }
}