voidio 0.1.14

VOID I/O - High-performance Cross-platform I/O for Rust.
use std::net::SocketAddr;

use super::connection::QuicConnection;

pub struct QuicStream<'a> {
    pub(crate) id: u32,
    pub(crate) src: &'a QuicConnection,
    pub(crate) ondata_handler: Option<Box<dyn FnMut(&[u8]) + Send>>,
    pub(crate) onclose_handler: Option<Box<dyn FnMut() + Send>>,
}

impl<'a> QuicStream<'a> {
    pub fn new(id: u32, src: &'a QuicConnection) -> Self {
        Self {
            id,
            src,
            ondata_handler: None,
            onclose_handler: None,
        }
    }

    pub fn id(&self) -> u32 {
        self.id
    }

    pub fn src_connection(&self) -> &QuicConnection {
        self.src
    }

    pub fn write(&self, data: &[u8]) -> Result<(), String> {
        Err("QuicStream::write is not implemented yet".to_string())
    }

    pub fn on_data<F>(&mut self, h: F) where F: FnMut(&[u8]) + Send + 'static {
        self.ondata_handler = Some(Box::new(h));
    }

    pub fn read(&self, buf: &mut [u8]) -> Result<usize, String> {
        Err("QuicStream::read is not implemented yet".to_string())
    }

    pub fn on_close<F>(&mut self, h: F) where F: FnMut() + Send + 'static {
        self.onclose_handler = Some(Box::new(h));
    }

    pub fn src(&self) -> SocketAddr {
        self.src.address
    }
}

impl<'a> std::fmt::Display for QuicStream<'a> {
    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
        write!(f, "QuicStream(id: {}, src: {})", self.id, self.src.address)
    }
}