use axum::http::{header, HeaderMap, HeaderValue};
wasmtime::component::bindgen!({
path: "src/interface",
world: "smg",
imports: { default: async | trappable },
exports: { default: async },
});
pub fn build_wasm_headers_from_axum_headers(
headers: &HeaderMap,
) -> Vec<smg::gateway::middleware_types::Header> {
let mut wasm_headers = Vec::new();
for (name, value) in headers {
if let Ok(value_str) = value.to_str() {
wasm_headers.push(smg::gateway::middleware_types::Header {
name: name.as_str().to_string(),
value: value_str.to_string(),
});
}
}
wasm_headers
}
pub fn apply_modify_action_to_headers(
headers: &mut HeaderMap,
modify: &smg::gateway::middleware_types::ModifyAction,
) {
for header_mod in &modify.headers_set {
if let (Ok(name), Ok(value)) = (
header_mod.name.parse::<header::HeaderName>(),
header_mod.value.parse::<HeaderValue>(),
) {
headers.insert(name, value);
}
}
for header_mod in &modify.headers_add {
if let (Ok(name), Ok(value)) = (
header_mod.name.parse::<header::HeaderName>(),
header_mod.value.parse::<HeaderValue>(),
) {
headers.append(name, value);
}
}
for name_str in &modify.headers_remove {
if let Ok(name) = name_str.parse::<header::HeaderName>() {
headers.remove(name);
}
}
}