Skip to content

Commit b570b4f

Browse files
authored
Remove some async annotations in bindings generation (#12042)
These are no longer necessary now that there's a sync `Access`-binding mode.
1 parent 882f22a commit b570b4f

File tree

6 files changed

+156
-162
lines changed

6 files changed

+156
-162
lines changed

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

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -6,13 +6,13 @@ mod generated {
66
path: "src/p3/wit",
77
world: "wasi:http/proxy",
88
imports: {
9-
"wasi:http/handler.handle": async | store | trappable | tracing,
9+
"wasi:http/handler.handle": store | trappable | tracing,
1010
"wasi:http/types.[drop]request": store | trappable | tracing,
1111
"wasi:http/types.[drop]response": store | trappable | tracing,
12-
"wasi:http/types.[static]request.consume-body": async | store | trappable | tracing,
13-
"wasi:http/types.[static]request.new": async | store | trappable | tracing,
14-
"wasi:http/types.[static]response.consume-body": async | store | trappable | tracing,
15-
"wasi:http/types.[static]response.new": async | store | trappable | tracing,
12+
"wasi:http/types.[static]request.consume-body": store | trappable | tracing,
13+
"wasi:http/types.[static]request.new": store | trappable | tracing,
14+
"wasi:http/types.[static]response.consume-body": store | trappable | tracing,
15+
"wasi:http/types.[static]response.new": store | trappable | tracing,
1616
default: trappable | tracing,
1717
},
1818
exports: { default: async | store | task_exit },

crates/wasi-http/src/p3/host/types.rs

Lines changed: 96 additions & 104 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ use http::header::CONTENT_LENGTH;
1414
use std::sync::Arc;
1515
use tokio::sync::oneshot;
1616
use wasmtime::component::{
17-
Access, Accessor, FutureProducer, FutureReader, Resource, ResourceTable, StreamReader,
17+
Access, FutureProducer, FutureReader, Resource, ResourceTable, StreamReader,
1818
};
1919
use wasmtime::{AsContextMut, StoreContextMut};
2020

@@ -312,72 +312,68 @@ impl HostFields for WasiHttpCtxView<'_> {
312312
}
313313

314314
impl HostRequestWithStore for WasiHttp {
315-
async fn new<T>(
316-
store: &Accessor<T, Self>,
315+
fn new<T>(
316+
mut store: Access<T, Self>,
317317
headers: Resource<Headers>,
318318
contents: Option<StreamReader<u8>>,
319319
trailers: FutureReader<Result<Option<Resource<Trailers>>, ErrorCode>>,
320320
options: Option<Resource<RequestOptions>>,
321321
) -> wasmtime::Result<(Resource<Request>, FutureReader<Result<(), ErrorCode>>)> {
322-
store.with(|mut store| {
323-
let (result_tx, result_rx) = oneshot::channel();
324-
let body = match contents
325-
.map(|rx| rx.try_into::<HostBodyStreamProducer<T>>(store.as_context_mut()))
326-
{
327-
Some(Ok(mut producer)) => Body::Host {
328-
body: mem::take(&mut producer.body),
329-
result_tx,
330-
},
331-
Some(Err(rx)) => Body::Guest {
332-
contents_rx: Some(rx),
333-
trailers_rx: trailers,
334-
result_tx,
335-
},
336-
None => Body::Guest {
337-
contents_rx: None,
338-
trailers_rx: trailers,
339-
result_tx,
340-
},
341-
};
342-
let WasiHttpCtxView { table, .. } = store.get();
343-
let headers = delete_fields(table, headers)?;
344-
let options = options
345-
.map(|options| delete_request_options(table, options))
346-
.transpose()?;
347-
let req = Request {
348-
method: http::Method::GET,
349-
scheme: None,
350-
authority: None,
351-
path_with_query: None,
352-
headers: headers.into(),
353-
options: options.map(Into::into),
354-
body,
355-
};
356-
let req = table.push(req).context("failed to push request to table")?;
357-
Ok((
358-
req,
359-
FutureReader::new(&mut store, GuestBodyResultProducer::Receiver(result_rx)),
360-
))
361-
})
362-
}
363-
364-
async fn consume_body<T>(
365-
store: &Accessor<T, Self>,
322+
let (result_tx, result_rx) = oneshot::channel();
323+
let body = match contents
324+
.map(|rx| rx.try_into::<HostBodyStreamProducer<T>>(store.as_context_mut()))
325+
{
326+
Some(Ok(mut producer)) => Body::Host {
327+
body: mem::take(&mut producer.body),
328+
result_tx,
329+
},
330+
Some(Err(rx)) => Body::Guest {
331+
contents_rx: Some(rx),
332+
trailers_rx: trailers,
333+
result_tx,
334+
},
335+
None => Body::Guest {
336+
contents_rx: None,
337+
trailers_rx: trailers,
338+
result_tx,
339+
},
340+
};
341+
let WasiHttpCtxView { table, .. } = store.get();
342+
let headers = delete_fields(table, headers)?;
343+
let options = options
344+
.map(|options| delete_request_options(table, options))
345+
.transpose()?;
346+
let req = Request {
347+
method: http::Method::GET,
348+
scheme: None,
349+
authority: None,
350+
path_with_query: None,
351+
headers: headers.into(),
352+
options: options.map(Into::into),
353+
body,
354+
};
355+
let req = table.push(req).context("failed to push request to table")?;
356+
Ok((
357+
req,
358+
FutureReader::new(&mut store, GuestBodyResultProducer::Receiver(result_rx)),
359+
))
360+
}
361+
362+
fn consume_body<T>(
363+
mut store: Access<T, Self>,
366364
req: Resource<Request>,
367365
fut: FutureReader<Result<(), ErrorCode>>,
368366
) -> wasmtime::Result<(
369367
StreamReader<u8>,
370368
FutureReader<Result<Option<Resource<Trailers>>, ErrorCode>>,
371369
)> {
372370
let getter = store.getter();
373-
store.with(|mut store| {
374-
let Request { body, .. } = store
375-
.get()
376-
.table
377-
.delete(req)
378-
.context("failed to delete request from table")?;
379-
Ok(body.consume(store, fut, getter))
380-
})
371+
let Request { body, .. } = store
372+
.get()
373+
.table
374+
.delete(req)
375+
.context("failed to delete request from table")?;
376+
Ok(body.consume(store, fut, getter))
381377
}
382378

383379
fn drop<T>(mut store: Access<'_, T, Self>, req: Resource<Request>) -> wasmtime::Result<()> {
@@ -602,66 +598,62 @@ impl HostRequestOptions for WasiHttpCtxView<'_> {
602598
}
603599

604600
impl HostResponseWithStore for WasiHttp {
605-
async fn new<T>(
606-
store: &Accessor<T, Self>,
601+
fn new<T>(
602+
mut store: Access<T, Self>,
607603
headers: Resource<Headers>,
608604
contents: Option<StreamReader<u8>>,
609605
trailers: FutureReader<Result<Option<Resource<Trailers>>, ErrorCode>>,
610606
) -> wasmtime::Result<(Resource<Response>, FutureReader<Result<(), ErrorCode>>)> {
611-
store.with(|mut store| {
612-
let (result_tx, result_rx) = oneshot::channel();
613-
let body = match contents
614-
.map(|rx| rx.try_into::<HostBodyStreamProducer<T>>(store.as_context_mut()))
615-
{
616-
Some(Ok(mut producer)) => Body::Host {
617-
body: mem::take(&mut producer.body),
618-
result_tx,
619-
},
620-
Some(Err(rx)) => Body::Guest {
621-
contents_rx: Some(rx),
622-
trailers_rx: trailers,
623-
result_tx,
624-
},
625-
None => Body::Guest {
626-
contents_rx: None,
627-
trailers_rx: trailers,
628-
result_tx,
629-
},
630-
};
631-
let WasiHttpCtxView { table, .. } = store.get();
632-
let headers = delete_fields(table, headers)?;
633-
let res = Response {
634-
status: http::StatusCode::OK,
635-
headers: headers.into(),
636-
body,
637-
};
638-
let res = table
639-
.push(res)
640-
.context("failed to push response to table")?;
641-
Ok((
642-
res,
643-
FutureReader::new(&mut store, GuestBodyResultProducer::Receiver(result_rx)),
644-
))
645-
})
646-
}
647-
648-
async fn consume_body<T>(
649-
store: &Accessor<T, Self>,
607+
let (result_tx, result_rx) = oneshot::channel();
608+
let body = match contents
609+
.map(|rx| rx.try_into::<HostBodyStreamProducer<T>>(store.as_context_mut()))
610+
{
611+
Some(Ok(mut producer)) => Body::Host {
612+
body: mem::take(&mut producer.body),
613+
result_tx,
614+
},
615+
Some(Err(rx)) => Body::Guest {
616+
contents_rx: Some(rx),
617+
trailers_rx: trailers,
618+
result_tx,
619+
},
620+
None => Body::Guest {
621+
contents_rx: None,
622+
trailers_rx: trailers,
623+
result_tx,
624+
},
625+
};
626+
let WasiHttpCtxView { table, .. } = store.get();
627+
let headers = delete_fields(table, headers)?;
628+
let res = Response {
629+
status: http::StatusCode::OK,
630+
headers: headers.into(),
631+
body,
632+
};
633+
let res = table
634+
.push(res)
635+
.context("failed to push response to table")?;
636+
Ok((
637+
res,
638+
FutureReader::new(&mut store, GuestBodyResultProducer::Receiver(result_rx)),
639+
))
640+
}
641+
642+
fn consume_body<T>(
643+
mut store: Access<T, Self>,
650644
res: Resource<Response>,
651645
fut: FutureReader<Result<(), ErrorCode>>,
652646
) -> wasmtime::Result<(
653647
StreamReader<u8>,
654648
FutureReader<Result<Option<Resource<Trailers>>, ErrorCode>>,
655649
)> {
656650
let getter = store.getter();
657-
store.with(|mut store| {
658-
let Response { body, .. } = store
659-
.get()
660-
.table
661-
.delete(res)
662-
.context("failed to delete response from table")?;
663-
Ok(body.consume(store, fut, getter))
664-
})
651+
let Response { body, .. } = store
652+
.get()
653+
.table
654+
.delete(res)
655+
.context("failed to delete response from table")?;
656+
Ok(body.consume(store, fut, getter))
665657
}
666658

667659
fn drop<T>(mut store: Access<'_, T, Self>, res: Resource<Response>) -> wasmtime::Result<()> {

crates/wasi/src/p3/bindings.rs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -79,10 +79,10 @@ mod generated {
7979
path: "src/p3/wit",
8080
world: "wasi:cli/command",
8181
imports: {
82-
"wasi:cli/stdin": async | store | tracing | trappable,
83-
"wasi:cli/stdout": async | store | tracing | trappable,
84-
"wasi:cli/stderr": async | store | tracing | trappable,
85-
"wasi:filesystem/types.[method]descriptor.read-via-stream": async | store | tracing | trappable,
82+
"wasi:cli/stdin": store | tracing | trappable,
83+
"wasi:cli/stdout": store | tracing | trappable,
84+
"wasi:cli/stderr": store | tracing | trappable,
85+
"wasi:filesystem/types.[method]descriptor.read-via-stream": store | tracing | trappable,
8686
"wasi:sockets/types.[method]tcp-socket.bind": async | store | tracing | trappable,
8787
"wasi:sockets/types.[method]tcp-socket.listen": async | store | tracing | trappable,
8888
"wasi:sockets/types.[method]tcp-socket.receive": async | store | tracing | trappable,

crates/wasi/src/p3/cli/host.rs

Lines changed: 19 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ use std::io::{self, Cursor};
1515
use tokio::io::{AsyncRead, AsyncWrite, ReadBuf};
1616
use tokio::sync::oneshot;
1717
use wasmtime::component::{
18-
Accessor, Destination, FutureReader, Resource, Source, StreamConsumer, StreamProducer,
18+
Access, Accessor, Destination, FutureReader, Resource, Source, StreamConsumer, StreamProducer,
1919
StreamReader, StreamResult,
2020
};
2121
use wasmtime::{AsContextMut as _, StoreContextMut};
@@ -193,27 +193,25 @@ impl terminal_stderr::Host for WasiCliCtxView<'_> {
193193
}
194194

195195
impl stdin::HostWithStore for WasiCli {
196-
async fn read_via_stream<U>(
197-
store: &Accessor<U, Self>,
196+
fn read_via_stream<U>(
197+
mut store: Access<U, Self>,
198198
) -> wasmtime::Result<(StreamReader<u8>, FutureReader<Result<(), ErrorCode>>)> {
199-
store.with(|mut store| {
200-
let rx = store.get().ctx.stdin.async_stream();
201-
let (result_tx, result_rx) = oneshot::channel();
202-
let stream = StreamReader::new(
203-
&mut store,
204-
InputStreamProducer {
205-
rx: Box::into_pin(rx),
206-
result_tx: Some(result_tx),
207-
},
208-
);
209-
let future = FutureReader::new(&mut store, async {
210-
anyhow::Ok(match result_rx.await {
211-
Ok(err) => Err(err),
212-
Err(_) => Ok(()),
213-
})
214-
});
215-
Ok((stream, future))
216-
})
199+
let rx = store.get().ctx.stdin.async_stream();
200+
let (result_tx, result_rx) = oneshot::channel();
201+
let stream = StreamReader::new(
202+
&mut store,
203+
InputStreamProducer {
204+
rx: Box::into_pin(rx),
205+
result_tx: Some(result_tx),
206+
},
207+
);
208+
let future = FutureReader::new(&mut store, async {
209+
anyhow::Ok(match result_rx.await {
210+
Ok(err) => Err(err),
211+
Err(_) => Ok(()),
212+
})
213+
});
214+
Ok((stream, future))
217215
}
218216
}
219217

0 commit comments

Comments
 (0)