@@ -16,6 +16,7 @@ use spin_core::{wasmtime, Engine, EngineBuilder, StoreBuilder};
16
16
17
17
use host_component:: DynamicHostComponents ;
18
18
use locked:: { ContentPath , LockedApp , LockedComponent , LockedComponentSource , LockedTrigger } ;
19
+ use values:: MetadataExt ;
19
20
20
21
pub use async_trait:: async_trait;
21
22
pub use host_component:: DynamicHostComponent ;
@@ -141,20 +142,15 @@ impl<'a> App<'a> {
141
142
/// `Err` only if there _is_ a value for the `key` but the typed
142
143
/// deserialization failed.
143
144
pub fn get_metadata < ' this , T : Deserialize < ' this > > ( & ' this self , key : & str ) -> Result < Option < T > > {
144
- self . locked
145
- . metadata
146
- . get ( key)
147
- . map ( |value| Ok ( T :: deserialize ( value) ?) )
148
- . transpose ( )
145
+ self . locked . metadata . get_typed ( key)
149
146
}
150
147
151
148
/// Deserializes typed metadata for this app.
152
149
///
153
- /// Like [`App::get_metadata`], but returns an `Err` if there is no metadata
154
- /// for the given `key`.
150
+ /// Like [`App::get_metadata`], but returns an error if there is
151
+ /// no metadata for the given `key`.
155
152
pub fn require_metadata < ' this , T : Deserialize < ' this > > ( & ' this self , key : & str ) -> Result < T > {
156
- self . get_metadata ( key) ?
157
- . ok_or_else ( || Error :: MetadataError ( format ! ( "missing required {key:?}" ) ) )
153
+ self . locked . metadata . require_typed ( key)
158
154
}
159
155
160
156
/// Returns an iterator of custom config [`Variable`]s defined for this app.
@@ -223,17 +219,15 @@ impl<'a> AppComponent<'a> {
223
219
/// `Err` only if there _is_ a value for the `key` but the typed
224
220
/// deserialization failed.
225
221
pub fn get_metadata < T : Deserialize < ' a > > ( & self , key : & str ) -> Result < Option < T > > {
226
- self . locked
227
- . metadata
228
- . get ( key)
229
- . map ( |value| {
230
- T :: deserialize ( value) . map_err ( |err| {
231
- Error :: MetadataError ( format ! (
232
- "failed to deserialize {key:?} = {value:?}: {err:?}"
233
- ) )
234
- } )
235
- } )
236
- . transpose ( )
222
+ self . locked . metadata . get_typed ( key)
223
+ }
224
+
225
+ /// Deserializes typed metadata for this component.
226
+ ///
227
+ /// Like [`AppComponent::get_metadata`], but returns an error if there is
228
+ /// no metadata for the given `key`.
229
+ pub fn require_metadata < ' this , T : Deserialize < ' this > > ( & ' this self , key : & str ) -> Result < T > {
230
+ self . locked . metadata . require_typed ( key)
237
231
}
238
232
239
233
/// Returns an iterator of custom config values for this component.
0 commit comments