waitfree-sync 0.3.3

A collection of wait-free data structures
Documentation
use waitfree_sync::{spsc::NoSpaceLeftError, *};

pub trait ReadPrimitive<T> {
    fn read(&mut self) -> Option<T>
    where
        T: Clone;
}
pub trait WritePrimitive<T, E> {
    fn write(&mut self, data: T) -> Result<(), E>;
}

impl<T> ReadPrimitive<T> for triple_buffer::Reader<T> {
    #[inline]
    fn read(&mut self) -> Option<T>
    where
        T: Clone,
    {
        self.try_read()
    }
}

impl<T> WritePrimitive<T, ()> for triple_buffer::Writer<T> {
    fn write(&mut self, data: T) -> Result<(), ()> {
        self.write(data);
        Ok(())
    }
}

impl<T> ReadPrimitive<T> for spsc::Receiver<T> {
    #[inline]
    fn read(&mut self) -> Option<T>
    where
        T: Clone,
    {
        self.try_recv()
    }
}

impl<T> WritePrimitive<T, NoSpaceLeftError<T>> for spsc::Sender<T> {
    fn write(&mut self, data: T) -> Result<(), NoSpaceLeftError<T>> {
        self.try_send(data)
    }
}