wasm-http-hyper 0.2.1

A Rust WebAssembly library that provides seamless integration between Node.js's IncomingMessage and Rust's hyper::Request
Documentation
use std::{convert::Infallible, str::FromStr};

use bytes::Bytes;
use futures::StreamExt;
use http_body_util::{combinators::BoxBody, StreamBody};
use hyper::{body::Frame, Method, Request};

use crate::IncomingMessage;

impl From<&IncomingMessage> for Request<BoxBody<Bytes, Infallible>> {
    fn from(message: &IncomingMessage) -> Self {
        let body = message.body_stream();
        let stream = body.map(|chunk| Ok::<_, Infallible>(Frame::data(chunk)));
        let stream = StreamBody::new(stream);
        let body: BoxBody<Bytes, Infallible> = BoxBody::new(stream);

        let headers = message.headers_map();
        let method = message.method();
        let url = message.url();

        let mut request_builder = Request::builder()
            .method(Method::from_str(&method).expect("failed to parse method"))
            .uri(url);
        for (key, value) in headers {
            request_builder = request_builder.header(key, value);
        }

        let request = request_builder.body(body).expect("failed to build request");
        request
    }
}