@@ -16,6 +16,7 @@ use spin_core::{wasmtime, Engine, EngineBuilder, StoreBuilder};
1616
1717use host_component:: DynamicHostComponents ;
1818use locked:: { ContentPath , LockedApp , LockedComponent , LockedComponentSource , LockedTrigger } ;
19+ use values:: MetadataExt ;
1920
2021pub use async_trait:: async_trait;
2122pub use host_component:: DynamicHostComponent ;
@@ -141,20 +142,15 @@ impl<'a> App<'a> {
141142 /// `Err` only if there _is_ a value for the `key` but the typed
142143 /// deserialization failed.
143144 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)
149146 }
150147
151148 /// Deserializes typed metadata for this app.
152149 ///
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`.
155152 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)
158154 }
159155
160156 /// Returns an iterator of custom config [`Variable`]s defined for this app.
@@ -223,17 +219,15 @@ impl<'a> AppComponent<'a> {
223219 /// `Err` only if there _is_ a value for the `key` but the typed
224220 /// deserialization failed.
225221 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)
237231 }
238232
239233 /// Returns an iterator of custom config values for this component.
0 commit comments