diff --git a/lib/wasi/src/runners/wasi.rs b/lib/wasi/src/runners/wasi.rs index 03b36436bf1..7fe261fc095 100644 --- a/lib/wasi/src/runners/wasi.rs +++ b/lib/wasi/src/runners/wasi.rs @@ -150,9 +150,10 @@ impl crate::runners::Runner for WasiRunner { command: &Command, container: &WapmContainer, ) -> Result { - let wasi = command - .get_annotation("wasi")? - .unwrap_or_else(|| Wasi::new(command_name)); + let Annotations { wasi } = command + .get_annotation(webc::metadata::annotations::WASI_RUNNER_URI)? + .unwrap_or_default(); + let wasi = wasi.unwrap_or_else(|| Wasi::new(command_name)); let atom_name = &wasi.atom; let atom = container .get_atom(atom_name) @@ -167,3 +168,8 @@ impl crate::runners::Runner for WasiRunner { Ok(()) } } + +#[derive(Default, Debug, serde::Deserialize)] +struct Annotations { + wasi: Option, +} diff --git a/lib/wasi/src/runners/wcgi/runner.rs b/lib/wasi/src/runners/wcgi/runner.rs index de1f1c80238..892a53b63dc 100644 --- a/lib/wasi/src/runners/wcgi/runner.rs +++ b/lib/wasi/src/runners/wcgi/runner.rs @@ -41,17 +41,20 @@ impl WcgiRunner { #[tracing::instrument(skip(self, ctx))] fn run(&mut self, command_name: &str, ctx: &RunnerContext<'_>) -> Result<(), Error> { - let wasi: Wasi = ctx + let key = webc::metadata::annotations::WCGI_RUNNER_URI; + let Annotations { wasi, wcgi } = ctx .command() - .get_annotation("wasi") - .context("Unable to retrieve the WASI metadata")? - .unwrap_or_else(|| Wasi::new(command_name)); + .get_annotation(key) + .with_context(|| format!("Unable to deserialize the \"{key}\" annotations"))? + .unwrap_or_default(); + + let wasi = wasi.unwrap_or_else(|| Wasi::new(command_name)); let module = self .load_module(&wasi, ctx) .context("Couldn't load the module")?; - let handler = self.create_handler(module, &wasi, ctx)?; + let handler = self.create_handler(module, &wasi, &wcgi, ctx)?; let task_manager = Arc::clone(&handler.task_manager); let callbacks = Arc::clone(&self.config.callbacks); @@ -126,11 +129,10 @@ impl WcgiRunner { &self, module: Module, wasi: &Wasi, + wcgi: &Wcgi, ctx: &RunnerContext<'_>, ) -> Result { - let Wcgi { dialect, .. } = ctx.command().get_annotation("wcgi")?.unwrap_or_default(); - - let dialect = match dialect { + let dialect = match &wcgi.dialect { Some(d) => d.parse().context("Unable to parse the CGI dialect")?, None => CgiDialect::Wcgi, }; @@ -343,6 +345,13 @@ impl Default for Config { } } +#[derive(Debug, Default, serde::Deserialize)] +struct Annotations { + wasi: Option, + #[serde(default)] + wcgi: Wcgi, +} + /// Callbacks that are triggered at various points in the lifecycle of a runner /// and any WebAssembly instances it may start. pub trait Callbacks: Send + Sync + 'static {