wasmtime_wasi_http/p3/
proxy.rs1use crate::p3::WasiHttpView;
2use crate::p3::bindings::Service;
3use crate::p3::bindings::http::types::{ErrorCode, Request, Response};
4use wasmtime::component::Accessor;
5use wasmtime::error::Context as _;
6
7impl Service {
8 pub async fn handle(
10 &self,
11 store: &Accessor<impl WasiHttpView>,
12 req: impl Into<Request>,
13 ) -> wasmtime::Result<Result<Response, ErrorCode>> {
14 let req = store.with(|mut store| {
15 store
16 .data_mut()
17 .http()
18 .table
19 .push(req.into())
20 .context("failed to push request to table")
21 })?;
22 match self.wasi_http_handler().call_handle(store, req).await? {
23 Ok(res) => {
24 let res = store.with(|mut store| {
25 store
26 .data_mut()
27 .http()
28 .table
29 .delete(res)
30 .context("failed to delete response from table")
31 })?;
32 Ok(Ok(res))
33 }
34 Err(err) => Ok(Err(err)),
35 }
36 }
37}