waki 0.5.1

HTTP client and server library for WASI
Documentation
use crate::{
    bindings::wasi::http::types::{HeaderError, Headers, IncomingRequest, IncomingResponse},
    header::HeaderMap,
};
use anyhow::Result;

macro_rules! impl_header {
    ($($t:ty),+ $(,)?) => ($(
        impl $t {
            pub fn headers_map(&self) -> Result<HeaderMap> {
                let headers_handle = self.headers();
                headers_handle
                    .entries()
                    .into_iter()
                    .map(|(key, value)| Ok((key.try_into()?, value.try_into()?)))
                    .collect::<Result<_, _>>()
            }
        }
    )+)
}

impl_header!(IncomingRequest, IncomingResponse);

impl TryFrom<HeaderMap> for Headers {
    type Error = HeaderError;

    fn try_from(headers: HeaderMap) -> Result<Self, Self::Error> {
        let entries = headers
            .iter()
            .map(|(k, v)| (k.to_string(), v.as_bytes().into()))
            .collect::<Vec<_>>();
        Headers::from_list(&entries)
    }
}