@@ -60,6 +60,15 @@ impl KeyValueDispatch {
6060 pub fn get_store < T : ' static > ( & self , store : Resource < T > ) -> anyhow:: Result < & Arc < dyn Store > > {
6161 self . stores . get ( store. rep ( ) ) . context ( "invalid store" )
6262 }
63+
64+ pub fn get_store_wasi < T : ' static > (
65+ & self ,
66+ store : Resource < T > ,
67+ ) -> Result < & Arc < dyn Store > , wasi_keyvalue:: store:: Error > {
68+ self . stores
69+ . get ( store. rep ( ) )
70+ . ok_or ( wasi_keyvalue:: store:: Error :: NoSuchStore )
71+ }
6372}
6473
6574impl Default for KeyValueDispatch {
@@ -153,22 +162,23 @@ impl wasi_keyvalue::store::Host for KeyValueDispatch {
153162 async fn open (
154163 & mut self ,
155164 identifier : String ,
156- ) -> anyhow:: Result < Result < Resource < wasi_keyvalue:: store:: Bucket > , wasi_keyvalue:: store:: Error > >
157- {
158- Ok ( async {
159- if self . allowed_stores . contains ( & identifier) {
160- let store = self
161- . stores
162- . push ( self . manager . get ( & identifier) . await . map_err ( to_wasi_err) ?)
163- . map_err ( |( ) | {
164- wasi_keyvalue:: store:: Error :: Other ( "store table full" . to_string ( ) )
165- } ) ?;
166- Ok ( Resource :: new_own ( store) )
167- } else {
168- Err ( wasi_keyvalue:: store:: Error :: AccessDenied )
169- }
165+ ) -> Result < Resource < wasi_keyvalue:: store:: Bucket > , wasi_keyvalue:: store:: Error > {
166+ if self . allowed_stores . contains ( & identifier) {
167+ let store = self
168+ . stores
169+ . push ( self . manager . get ( & identifier) . await . map_err ( to_wasi_err) ?)
170+ . map_err ( |( ) | wasi_keyvalue:: store:: Error :: Other ( "store table full" . to_string ( ) ) ) ?;
171+ Ok ( Resource :: new_own ( store) )
172+ } else {
173+ Err ( wasi_keyvalue:: store:: Error :: AccessDenied )
170174 }
171- . await )
175+ }
176+
177+ fn convert_error (
178+ & mut self ,
179+ error : spin_world:: wasi:: keyvalue:: store:: Error ,
180+ ) -> std:: result:: Result < spin_world:: wasi:: keyvalue:: store:: Error , anyhow:: Error > {
181+ Ok ( error)
172182 }
173183}
174184
@@ -179,52 +189,53 @@ impl wasi_keyvalue::store::HostBucket for KeyValueDispatch {
179189 & mut self ,
180190 self_ : Resource < Bucket > ,
181191 key : String ,
182- ) -> anyhow :: Result < Result < Option < Vec < u8 > > , wasi_keyvalue:: store:: Error > > {
183- let store = self . get_store ( self_) ?;
184- Ok ( store. get ( & key) . await . map_err ( to_wasi_err) )
192+ ) -> Result < Option < Vec < u8 > > , wasi_keyvalue:: store:: Error > {
193+ let store = self . get_store_wasi ( self_) ?;
194+ store. get ( & key) . await . map_err ( to_wasi_err)
185195 }
186196
187197 async fn set (
188198 & mut self ,
189199 self_ : Resource < Bucket > ,
190200 key : String ,
191201 value : Vec < u8 > ,
192- ) -> anyhow :: Result < Result < ( ) , wasi_keyvalue:: store:: Error > > {
193- let store = self . get_store ( self_) ?;
194- Ok ( store. set ( & key, & value) . await . map_err ( to_wasi_err) )
202+ ) -> Result < ( ) , wasi_keyvalue:: store:: Error > {
203+ let store = self . get_store_wasi ( self_) ?;
204+ store. set ( & key, & value) . await . map_err ( to_wasi_err)
195205 }
196206
197207 async fn delete (
198208 & mut self ,
199209 self_ : Resource < Bucket > ,
200210 key : String ,
201- ) -> anyhow :: Result < Result < ( ) , wasi_keyvalue:: store:: Error > > {
202- let store = self . get_store ( self_) ?;
203- Ok ( store. delete ( & key) . await . map_err ( to_wasi_err) )
211+ ) -> Result < ( ) , wasi_keyvalue:: store:: Error > {
212+ let store = self . get_store_wasi ( self_) ?;
213+ store. delete ( & key) . await . map_err ( to_wasi_err)
204214 }
205215
206216 async fn exists (
207217 & mut self ,
208218 self_ : Resource < Bucket > ,
209219 key : String ,
210- ) -> anyhow :: Result < Result < bool , wasi_keyvalue:: store:: Error > > {
211- let store = self . get_store ( self_) ?;
212- Ok ( store. exists ( & key) . await . map_err ( to_wasi_err) )
220+ ) -> Result < bool , wasi_keyvalue:: store:: Error > {
221+ let store = self . get_store_wasi ( self_) ?;
222+ store. exists ( & key) . await . map_err ( to_wasi_err)
213223 }
214224
215225 async fn list_keys (
216226 & mut self ,
217227 self_ : Resource < Bucket > ,
218228 cursor : Option < u64 > ,
219- ) -> anyhow:: Result < Result < wasi_keyvalue:: store:: KeyResponse , wasi_keyvalue:: store:: Error > >
220- {
229+ ) -> Result < wasi_keyvalue:: store:: KeyResponse , wasi_keyvalue:: store:: Error > {
221230 if cursor. unwrap_or_default ( ) != 0 {
222- anyhow:: bail!( "list_keys: cursor not supported" ) ;
231+ return Err ( wasi_keyvalue:: store:: Error :: Other (
232+ "list_keys: cursor not supported" . to_owned ( ) ,
233+ ) ) ;
223234 }
224235
225- let store = self . get_store ( self_) ?;
236+ let store = self . get_store_wasi ( self_) ?;
226237 let keys = store. get_keys ( ) . await . map_err ( to_wasi_err) ?;
227- Ok ( Ok ( wasi_keyvalue:: store:: KeyResponse { keys, cursor : None } ) )
238+ Ok ( wasi_keyvalue:: store:: KeyResponse { keys, cursor : None } )
228239 }
229240
230241 fn drop ( & mut self , rep : Resource < Bucket > ) -> anyhow:: Result < ( ) > {
0 commit comments