@@ -7,7 +7,7 @@ use wasmtime::{
77use wasmtime_wasi:: preview2:: {
88 pipe:: MemoryOutputPipe ,
99 preview1:: { WasiPreview1Adapter , WasiPreview1View } ,
10- DirPerms , FilePerms , StdinStream , StdoutStream , WasiCtx , WasiCtxBuilder , WasiView ,
10+ DirPerms , FilePerms , WasiCtx , WasiCtxBuilder , WasiView ,
1111} ;
1212
1313struct Ctx {
@@ -48,98 +48,40 @@ fn prepare_workspace(exe_name: &str) -> Result<TempDir> {
4848 Ok ( tempdir)
4949}
5050
51- struct StoreBuilder {
52- builder : WasiCtxBuilder ,
53- inherit_stdio : bool ,
54- workspace : TempDir ,
55- stdin : Option < Box < dyn StdinStream > > ,
56- stdout : Option < Box < dyn StdoutStream > > ,
57- stderr : Option < Box < dyn StdoutStream > > ,
58- }
59-
60- impl StoreBuilder {
61- fn new ( name : & str ) -> Result < Self > {
62- let mut builder = WasiCtxBuilder :: new ( ) ;
63-
64- builder
65- . args ( & [ name, "." ] )
66- . inherit_network ( )
67- . allow_ip_name_lookup ( true ) ;
68-
69- let workspace = prepare_workspace ( name) ?;
70-
71- Ok ( Self {
72- builder,
73- inherit_stdio : false ,
74- workspace,
75- stdin : None ,
76- stdout : None ,
77- stderr : None ,
78- } )
79- }
80-
81- fn stdout ( & mut self , stdout : Box < dyn StdoutStream > ) -> & mut Self {
82- self . stdout . replace ( stdout) ;
83- self
51+ fn store ( engine : & Engine , name : & str , inherit_stdio : bool ) -> Result < ( Store < Ctx > , TempDir ) > {
52+ let stdout = MemoryOutputPipe :: new ( 4096 ) ;
53+ let stderr = MemoryOutputPipe :: new ( 4096 ) ;
54+ let workspace = prepare_workspace ( name) ?;
55+
56+ // Create our wasi context.
57+ let mut builder = WasiCtxBuilder :: new ( ) ;
58+ if inherit_stdio {
59+ builder. inherit_stdio ( ) ;
60+ } else {
61+ builder. stdout ( stdout. clone ( ) ) . stderr ( stderr. clone ( ) ) ;
8462 }
8563
86- fn stdin ( & mut self , stdin : Box < dyn StdinStream > ) -> & mut Self {
87- self . stdin . replace ( stdin) ;
88- self
64+ builder
65+ . args ( & [ name, "." ] )
66+ . inherit_network ( )
67+ . allow_ip_name_lookup ( true ) ;
68+ println ! ( "preopen: {:?}" , workspace) ;
69+ let preopen_dir =
70+ cap_std:: fs:: Dir :: open_ambient_dir ( workspace. path ( ) , cap_std:: ambient_authority ( ) ) ?;
71+ builder. preopened_dir ( preopen_dir, DirPerms :: all ( ) , FilePerms :: all ( ) , "." ) ;
72+ for ( var, val) in test_programs_artifacts:: wasi_tests_environment ( ) {
73+ builder. env ( var, val) ;
8974 }
9075
91- fn build ( mut self , engine : & Engine ) -> Result < ( Store < Ctx > , TempDir ) > {
92- let stdout = MemoryOutputPipe :: new ( 4096 ) ;
93- let stderr = MemoryOutputPipe :: new ( 4096 ) ;
94-
95- // Create our wasi context.
96- if self . inherit_stdio {
97- self . builder . inherit_stdio ( ) ;
98- } else {
99- if let Some ( stdin) = self . stdin {
100- self . builder . stdin ( stdin) ;
101- }
102-
103- if let Some ( stdout) = self . stdout {
104- self . builder . stdout ( stdout) ;
105- } else {
106- self . builder . stdout ( stdout. clone ( ) ) ;
107- }
108-
109- if let Some ( stderr) = self . stderr {
110- self . builder . stderr ( stderr) ;
111- } else {
112- self . builder . stderr ( stderr. clone ( ) ) ;
113- }
114- }
115-
116- println ! ( "preopen: {:?}" , self . workspace) ;
117- let preopen_dir = cap_std:: fs:: Dir :: open_ambient_dir (
118- self . workspace . path ( ) ,
119- cap_std:: ambient_authority ( ) ,
120- ) ?;
121- self . builder
122- . preopened_dir ( preopen_dir, DirPerms :: all ( ) , FilePerms :: all ( ) , "." ) ;
123- for ( var, val) in test_programs_artifacts:: wasi_tests_environment ( ) {
124- self . builder . env ( var, val) ;
125- }
126-
127- let ctx = Ctx {
128- table : ResourceTable :: new ( ) ,
129- wasi : self . builder . build ( ) ,
130- stderr,
131- stdout,
132- adapter : WasiPreview1Adapter :: new ( ) ,
133- } ;
134-
135- Ok ( ( Store :: new ( & engine, ctx) , self . workspace ) )
136- }
137- }
76+ let ctx = Ctx {
77+ table : ResourceTable :: new ( ) ,
78+ wasi : builder. build ( ) ,
79+ stderr,
80+ stdout,
81+ adapter : WasiPreview1Adapter :: new ( ) ,
82+ } ;
13883
139- fn store ( engine : & Engine , name : & str , inherit_stdio : bool ) -> Result < ( Store < Ctx > , TempDir ) > {
140- let mut builder = StoreBuilder :: new ( name) ?;
141- builder. inherit_stdio = inherit_stdio;
142- builder. build ( engine)
84+ Ok ( ( Store :: new ( & engine, ctx) , workspace) )
14385}
14486
14587impl Drop for Ctx {
@@ -166,6 +108,5 @@ macro_rules! assert_test_exists {
166108
167109mod api;
168110mod async_;
169- mod piped;
170111mod preview1;
171112mod sync;
0 commit comments