wasm_http_hyper/
hyper.rs

1use std::{convert::Infallible, str::FromStr};
2
3use bytes::Bytes;
4use futures::StreamExt;
5use http_body_util::{combinators::BoxBody, StreamBody};
6use hyper::{body::Frame, Method, Request};
7
8use crate::IncomingMessage;
9
10impl From<&IncomingMessage> for Request<BoxBody<Bytes, Infallible>> {
11    fn from(message: &IncomingMessage) -> Self {
12        let body = message.body_stream();
13        let stream = body.map(|chunk| Ok::<_, Infallible>(Frame::data(chunk)));
14        let stream = StreamBody::new(stream);
15        let body: BoxBody<Bytes, Infallible> = BoxBody::new(stream);
16
17        let headers = message.headers_map();
18        let method = message.method();
19        let url = message.url();
20
21        let mut request_builder = Request::builder()
22            .method(Method::from_str(&method).expect("failed to parse method"))
23            .uri(url);
24        for (key, value) in headers {
25            request_builder = request_builder.header(key, value);
26        }
27
28        let request = request_builder.body(body).expect("failed to build request");
29        request
30    }
31}