Path: blob/main/crates/wasi-http/src/p3/proxy.rs
3071 views
use crate::p3::WasiHttpView;1use crate::p3::bindings::Service;2use crate::p3::bindings::http::types::{ErrorCode, Request, Response};3use wasmtime::component::{Accessor, TaskExit};4use wasmtime::error::Context as _;56impl Service {7/// Call `wasi:http/handler#handle` on [Service] getting a [Response] back.8pub async fn handle(9&self,10store: &Accessor<impl WasiHttpView>,11req: impl Into<Request>,12) -> wasmtime::Result<Result<(Response, TaskExit), ErrorCode>> {13let req = store.with(|mut store| {14store15.data_mut()16.http()17.table18.push(req.into())19.context("failed to push request to table")20})?;21match self.wasi_http_handler().call_handle(store, req).await? {22(Ok(res), task) => {23let res = store.with(|mut store| {24store25.data_mut()26.http()27.table28.delete(res)29.context("failed to delete response from table")30})?;31Ok(Ok((res, task)))32}33(Err(err), _) => Ok(Err(err)),34}35}36}373839