message-sink 0.1.0

Message framing for AsyncRead + AsyncWrite
Documentation
use std::{
    ops::Range,
    task::{Context, Waker},
};

#[derive(Default)]
pub struct AsyncBuffer {
    buffer: Vec<u8>,
    waker: Option<Waker>,
}

impl AsyncBuffer {
    pub fn as_ref(&mut self) -> &Vec<u8> {
        &self.buffer
    }
    pub fn drain(&mut self, range: Range<usize>) {
        self.buffer.drain(range);
    }
    pub fn extend(&mut self, vec: Vec<u8>) {
        self.buffer.extend(vec);
        self.wake();
    }
    pub fn wake(&mut self) {
        if let Some(waker) = &self.waker {
            waker.wake_by_ref()
        }
        self.waker = None;
    }
    pub fn set_waker(&mut self, cx: &mut Context<'_>) {
        self.waker = Some(cx.waker().clone());
    }
}