ntsync 0.1.4

An simple crate for using the new ntsync linux driver with rust.
Documentation
#![allow(unused_imports)]
use log::*;
use ntsync::{
    Error,
    NtSync,
    OwnerId,
};
use rstest::rstest;
use std::{
    collections::HashSet,
    thread::{
        Builder,
        JoinHandle,
    },
};
use test_log::test;

mod fixtures;
use fixtures::*;

#[test(rstest)]
#[cfg(feature = "unstable_mutex")]
fn test_mutex_locking(instance: NtSync) -> Result<(), Error> {
    let mutex = instance.new_mutex()?;
    let thread_data = (instance.clone(), mutex, OwnerId::random());
    let owner = OwnerId::random();
    trace!("My owner: {}\nother owner: {}", owner, thread_data.2);
    let mut sources = HashSet::new();
    sources.insert(mutex.into());
    instance.wait_all(sources, None, Some(owner))?;
    let thread: JoinHandle<Result<(), Error>> = match Builder::new().name("lock thread".to_owned()).spawn::<_, Result<(), Error>>(move || {
        let (instance, mutex, _owner) = thread_data;
        debug!("current owner of the mutex: {:?}", mutex.read());
        let mut sources = HashSet::new();
        sources.insert(mutex.into());
        let resp = instance.wait_all(sources, None, Some(_owner))?;
        Ok(())
    }) {
        Ok(join) => join,
        Err(error) => panic!("Failed to spawn thread for the test: {error}"),
    };
    let mut failed = false;
    match thread.join() {
        Ok(Err(error)) => return Err(error),
        Ok(Ok(())) => {},
        Err(error) => {
            error!("Failed to executed threat correctly: {error:?}");
            failed = true;
        },
    }
    if failed {
        panic!();
    }
    Ok(())
}