wstd 0.5.0-draft2

An async standard library for Wasm Components and WASI 0.2
Documentation
pub use http::header::{HeaderMap, HeaderName, HeaderValue};

use super::{Error, Result};
use wasi::http::types::Fields;

pub(crate) fn header_map_from_wasi(wasi_fields: Fields) -> Result<HeaderMap> {
    let mut output = HeaderMap::new();
    for (key, value) in wasi_fields.entries() {
        let key = HeaderName::from_bytes(key.as_bytes())
            .map_err(|e| Error::from(e).context("header name {key}"))?;
        let value = HeaderValue::from_bytes(&value)
            .map_err(|e| Error::from(e).context("header value for {key}"))?;
        output.append(key, value);
    }
    Ok(output)
}

pub(crate) fn header_map_to_wasi(header_map: &HeaderMap) -> Result<Fields> {
    let wasi_fields = Fields::new();
    for (key, value) in header_map {
        wasi_fields
            .append(&key.as_str().to_owned(), &value.as_bytes().to_owned())
            .map_err(|e| Error::from(e).context("header named {key}"))?;
    }
    Ok(wasi_fields)
}