async-http1-lite 0.3.2

Asynchronous http1 stream.
Documentation
use async_sleep::impl_async_io::Timer;
use futures_lite::future::block_on;
use futures_util::{io::Cursor, AsyncRead, AsyncReadExt as _, AsyncWrite, AsyncWriteExt as _};

use async_http1_lite::stream::{Http1ClientStream, Http1ServerStream};

struct MyStream<S>(S)
where
    S: AsyncRead + AsyncWrite;

#[test]
fn client_get_ref() -> Result<(), Box<dyn std::error::Error>> {
    let cursor = Cursor::new(vec![]);

    let stream: Http1ClientStream<_, Timer> = Http1ClientStream::new(cursor);

    assert_eq!(stream.get_ref().get_ref(), &[]);

    Ok(())
}

#[test]
fn client_get_mut() -> Result<(), Box<dyn std::error::Error>> {
    let cursor = Cursor::new(vec![]);

    let mut stream: Http1ClientStream<_, Timer> = Http1ClientStream::new(cursor);

    assert_eq!(stream.get_mut().get_mut(), &mut []);

    Ok(())
}

#[test]
fn client_into_inner() -> Result<(), Box<dyn std::error::Error>> {
    let cursor = Cursor::new(vec![]);

    let stream: Http1ClientStream<_, Timer> = Http1ClientStream::new(cursor);

    assert_eq!(stream.into_inner()?.into_inner(), []);

    Ok(())
}

#[test]
fn client_read_and_write() -> Result<(), Box<dyn std::error::Error>> {
    block_on(async {
        let cursor = Cursor::new(b"foo".to_vec());

        let mut stream: Http1ClientStream<_, Timer> = Http1ClientStream::new(cursor);

        let mut buf = vec![0u8; 5];
        let n = stream.read(&mut buf).await?;
        assert_eq!(n, 3);
        assert_eq!(buf, b"foo\0\0");

        stream.write_all(b"bar").await?;

        Ok(())
    })
}

#[test]
fn client_asyncread_asyncwrite_bound() -> Result<(), Box<dyn std::error::Error>> {
    let cursor = Cursor::new(b"".to_vec());
    let stream: Http1ClientStream<_, Timer> = Http1ClientStream::new(cursor);
    let _ = MyStream(stream);

    Ok(())
}

#[test]
fn server_get_ref() -> Result<(), Box<dyn std::error::Error>> {
    let cursor = Cursor::new(vec![]);

    let stream: Http1ServerStream<_, Timer> = Http1ServerStream::new(cursor);

    assert_eq!(stream.get_ref().get_ref(), &[]);

    Ok(())
}

#[test]
fn server_get_mut() -> Result<(), Box<dyn std::error::Error>> {
    let cursor = Cursor::new(vec![]);

    let mut stream: Http1ServerStream<_, Timer> = Http1ServerStream::new(cursor);

    assert_eq!(stream.get_mut().get_mut(), &mut []);

    Ok(())
}

#[test]
fn server_into_inner() -> Result<(), Box<dyn std::error::Error>> {
    let cursor = Cursor::new(vec![]);

    let stream: Http1ServerStream<_, Timer> = Http1ServerStream::new(cursor);

    assert_eq!(stream.into_inner()?.into_inner(), []);

    Ok(())
}

#[test]
fn server_read_and_write() -> Result<(), Box<dyn std::error::Error>> {
    block_on(async {
        let cursor = Cursor::new(b"foo".to_vec());

        let mut stream: Http1ServerStream<_, Timer> = Http1ServerStream::new(cursor);

        let mut buf = vec![0u8; 5];
        let n = stream.read(&mut buf).await?;
        assert_eq!(n, 3);
        assert_eq!(buf, b"foo\0\0");

        stream.write_all(b"bar").await?;

        Ok(())
    })
}

#[test]
fn server_asyncread_asyncwrite_bound() -> Result<(), Box<dyn std::error::Error>> {
    let cursor = Cursor::new(b"".to_vec());
    let stream: Http1ServerStream<_, Timer> = Http1ServerStream::new(cursor);
    let _ = MyStream(stream);

    Ok(())
}