puzz 0.2.0

A simple and powerful web framework.
Documentation
use bytes::{Buf, BufMut, Bytes};
use puzz_core::body::{Body, BodyExt};
use puzz_core::{BoxError, Request};

pub async fn bytes(request: &mut Request) -> Result<Bytes, BoxError> {
    let mut body = std::mem::take(request.body_mut());

    let mut buf1 = if let Some(buf) = body.next().await {
        buf?
    } else {
        return Ok(Bytes::new());
    };

    let buf2 = if let Some(buf) = body.next().await {
        buf?
    } else {
        return Ok(buf1.copy_to_bytes(buf1.remaining()));
    };

    let cap = buf1.remaining() + buf2.remaining() + body.size_hint().lower() as usize;
    let mut vec = Vec::with_capacity(cap);

    vec.put(buf1);
    vec.put(buf2);

    while let Some(buf) = body.next().await {
        vec.put(buf?);
    }

    Ok(vec.into())
}