@@ -14,7 +14,7 @@ use http::header::CONTENT_LENGTH;
1414use std:: sync:: Arc ;
1515use tokio:: sync:: oneshot;
1616use wasmtime:: component:: {
17- Access , Accessor , FutureProducer , FutureReader , Resource , ResourceTable , StreamReader ,
17+ Access , FutureProducer , FutureReader , Resource , ResourceTable , StreamReader ,
1818} ;
1919use wasmtime:: { AsContextMut , StoreContextMut } ;
2020
@@ -312,72 +312,68 @@ impl HostFields for WasiHttpCtxView<'_> {
312312}
313313
314314impl 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
604600impl 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 < ( ) > {
0 commit comments