use super::{ConfigureOps, ContextOps, DrainOps, LogOps};
use crate::abi::proxy_wasm::hostcalls;
use crate::abi::proxy_wasm::types::MapType;
use crate::host::{self, ByteString, HeaderMap, StreamInfo};
pub(super) struct Host;
impl ContextOps for Host {
fn configuration(&self, start: usize, max_size: usize) -> host::Result<ByteString> {
hostcalls::get_plugin_configuration(start, max_size)
}
}
impl ConfigureOps for Host {}
impl LogOps for Host {
fn request_headers(&self) -> host::Result<HeaderMap> {
hostcalls::get_map(MapType::HttpRequestHeaders)
}
fn request_header(&self, name: &str) -> host::Result<Option<ByteString>> {
hostcalls::get_map_value(MapType::HttpRequestHeaders, name)
}
fn response_headers(&self) -> host::Result<HeaderMap> {
hostcalls::get_map(MapType::HttpResponseHeaders)
}
fn response_header(&self, name: &str) -> host::Result<Option<ByteString>> {
hostcalls::get_map_value(MapType::HttpResponseHeaders, name)
}
fn response_trailers(&self) -> host::Result<HeaderMap> {
hostcalls::get_map(MapType::HttpResponseTrailers)
}
fn response_trailer(&self, name: &str) -> host::Result<Option<ByteString>> {
hostcalls::get_map_value(MapType::HttpResponseTrailers, &name)
}
fn stream_info(&self) -> &dyn StreamInfo {
StreamInfo::default()
}
}
impl DrainOps for Host {
fn done(&self) -> host::Result<()> {
hostcalls::done()
}
}