Skip to content

Commit 68f6d61

Browse files
committed
feat(p3-http): begin implementation
Signed-off-by: Roman Volosatovs <rvolosatovs@riseup.net>
1 parent aa91737 commit 68f6d61

File tree

6 files changed

+585
-79
lines changed

6 files changed

+585
-79
lines changed

crates/wasi-http/src/p3/bindings.rs

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,21 @@ mod generated {
1212
default: trappable | tracing,
1313
},
1414
exports: { default: async | store },
15+
with: {
16+
"wasi:http/types/fields": with::Fields,
17+
"wasi:http/types/request": crate::p3::Request,
18+
"wasi:http/types/request-options": with::RequestOptions,
19+
"wasi:http/types/response": crate::p3::Response,
20+
},
1521
});
22+
23+
mod with {
24+
/// The concrete type behind a `wasi:http/types/fields` resource.
25+
pub type Fields = crate::p3::MaybeMutable<http::HeaderMap>;
26+
27+
/// The concrete type behind a `wasi:http/types/request-options` resource.
28+
pub type RequestOptions = crate::p3::MaybeMutable<crate::p3::RequestOptions>;
29+
}
1630
}
1731

1832
pub use self::generated::wasi::*;
Lines changed: 88 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,90 @@
1+
use crate::p3::bindings::http::types::{Fields, Request, Response};
2+
use anyhow::Context as _;
3+
use core::ops::Deref;
4+
use wasmtime::component::{Resource, ResourceTable};
5+
16
mod handler;
27
mod types;
8+
9+
fn get_fields<'a>(
10+
table: &'a ResourceTable,
11+
fields: &Resource<Fields>,
12+
) -> wasmtime::Result<&'a Fields> {
13+
table
14+
.get(&fields)
15+
.context("failed to get fields from table")
16+
}
17+
18+
fn get_fields_mut<'a>(
19+
table: &'a mut ResourceTable,
20+
fields: &Resource<Fields>,
21+
) -> wasmtime::Result<&'a mut Fields> {
22+
table
23+
.get_mut(&fields)
24+
.context("failed to get fields from table")
25+
}
26+
27+
fn push_fields(table: &mut ResourceTable, fields: Fields) -> wasmtime::Result<Resource<Fields>> {
28+
table.push(fields).context("failed to push fields to table")
29+
}
30+
31+
fn delete_fields(table: &mut ResourceTable, fields: Resource<Fields>) -> wasmtime::Result<Fields> {
32+
table
33+
.delete(fields)
34+
.context("failed to delete fields from table")
35+
}
36+
37+
fn get_request<'a>(
38+
table: &'a ResourceTable,
39+
req: &Resource<Request>,
40+
) -> wasmtime::Result<&'a Request> {
41+
table.get(req).context("failed to get request from table")
42+
}
43+
44+
fn get_request_mut<'a>(
45+
table: &'a mut ResourceTable,
46+
req: &Resource<Request>,
47+
) -> wasmtime::Result<&'a mut Request> {
48+
table
49+
.get_mut(req)
50+
.context("failed to get request from table")
51+
}
52+
53+
fn push_request(table: &mut ResourceTable, req: Request) -> wasmtime::Result<Resource<Request>> {
54+
table.push(req).context("failed to push request to table")
55+
}
56+
57+
fn delete_request(table: &mut ResourceTable, req: Resource<Request>) -> wasmtime::Result<Request> {
58+
table
59+
.delete(req)
60+
.context("failed to delete request from table")
61+
}
62+
63+
fn get_response<'a>(
64+
table: &'a ResourceTable,
65+
res: &Resource<Response>,
66+
) -> wasmtime::Result<&'a Response> {
67+
table.get(res).context("failed to get response from table")
68+
}
69+
70+
fn get_response_mut<'a>(
71+
table: &'a mut ResourceTable,
72+
res: &Resource<Response>,
73+
) -> wasmtime::Result<&'a mut Response> {
74+
table
75+
.get_mut(res)
76+
.context("failed to get response from table")
77+
}
78+
79+
fn push_response(table: &mut ResourceTable, res: Response) -> wasmtime::Result<Resource<Response>> {
80+
table.push(res).context("failed to push response to table")
81+
}
82+
83+
fn delete_response(
84+
table: &mut ResourceTable,
85+
res: Resource<Response>,
86+
) -> wasmtime::Result<Response> {
87+
table
88+
.delete(res)
89+
.context("failed to delete response from table")
90+
}

0 commit comments

Comments
 (0)