1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
use core::{future::Future, pin::Pin};

/// The `Read` trait allows for reading bytes from a source asynchronously.
pub trait Read<'sess> {
    /// The error type returned by [`Read::read`].
    type Error;

    /// Pull some bytes from this source into the specified buffer
    /// asynchronously, eventually returning how many bytes were read.
    fn read(
        &'sess mut self,
        buf: &'sess mut [u8],
    ) -> Pin<Box<dyn Future<Output = Result<usize, Self::Error>> + Send + 'sess>>;
}