1- use anyhow:: Result ;
1+ use anyhow:: { Context , Result } ;
22use spin_app:: MetadataKey ;
33use spin_core:: { async_trait, wasmtime:: component:: Resource } ;
44use spin_world:: v2:: key_value;
@@ -55,6 +55,10 @@ impl KeyValueDispatch {
5555 self . allowed_stores = allowed_stores;
5656 self . manager = manager;
5757 }
58+
59+ pub fn get_store ( & self , store : Resource < key_value:: Store > ) -> anyhow:: Result < & Arc < dyn Store > > {
60+ self . stores . get ( store. rep ( ) ) . context ( "invalid store" )
61+ }
5862}
5963
6064impl Default for KeyValueDispatch {
@@ -88,14 +92,8 @@ impl key_value::HostStore for KeyValueDispatch {
8892 store : Resource < key_value:: Store > ,
8993 key : String ,
9094 ) -> Result < Result < Option < Vec < u8 > > , Error > > {
91- Ok ( async {
92- self . stores
93- . get ( store. rep ( ) )
94- . ok_or ( Error :: InvalidStore ) ?
95- . get ( & key)
96- . await
97- }
98- . await )
95+ let store = self . get_store ( store) ?;
96+ Ok ( store. get ( & key) . await )
9997 }
10098
10199 async fn set (
@@ -104,58 +102,34 @@ impl key_value::HostStore for KeyValueDispatch {
104102 key : String ,
105103 value : Vec < u8 > ,
106104 ) -> Result < Result < ( ) , Error > > {
107- Ok ( async {
108- self . stores
109- . get ( store. rep ( ) )
110- . ok_or ( Error :: InvalidStore ) ?
111- . set ( & key, & value)
112- . await
113- }
114- . await )
105+ let store = self . get_store ( store) ?;
106+ Ok ( store. set ( & key, & value) . await )
115107 }
116108
117109 async fn delete (
118110 & mut self ,
119111 store : Resource < key_value:: Store > ,
120112 key : String ,
121113 ) -> Result < Result < ( ) , Error > > {
122- Ok ( async {
123- self . stores
124- . get ( store. rep ( ) )
125- . ok_or ( Error :: InvalidStore ) ?
126- . delete ( & key)
127- . await
128- }
129- . await )
114+ let store = self . get_store ( store) ?;
115+ Ok ( store. delete ( & key) . await )
130116 }
131117
132118 async fn exists (
133119 & mut self ,
134120 store : Resource < key_value:: Store > ,
135121 key : String ,
136122 ) -> Result < Result < bool , Error > > {
137- Ok ( async {
138- self . stores
139- . get ( store. rep ( ) )
140- . ok_or ( Error :: InvalidStore ) ?
141- . exists ( & key)
142- . await
143- }
144- . await )
123+ let store = self . get_store ( store) ?;
124+ Ok ( store. exists ( & key) . await )
145125 }
146126
147127 async fn get_keys (
148128 & mut self ,
149129 store : Resource < key_value:: Store > ,
150130 ) -> Result < Result < Vec < String > , Error > > {
151- Ok ( async {
152- self . stores
153- . get ( store. rep ( ) )
154- . ok_or ( Error :: InvalidStore ) ?
155- . get_keys ( )
156- . await
157- }
158- . await )
131+ let store = self . get_store ( store) ?;
132+ Ok ( store. get_keys ( ) . await )
159133 }
160134
161135 fn drop ( & mut self , store : Resource < key_value:: Store > ) -> Result < ( ) > {
@@ -176,7 +150,6 @@ fn to_legacy_error(value: key_value::Error) -> LegacyError {
176150 Error :: StoreTableFull => LegacyError :: StoreTableFull ,
177151 Error :: NoSuchStore => LegacyError :: NoSuchStore ,
178152 Error :: AccessDenied => LegacyError :: AccessDenied ,
179- Error :: InvalidStore => LegacyError :: InvalidStore ,
180153 Error :: Io ( s) => LegacyError :: Io ( s) ,
181154 }
182155}
0 commit comments