use crate::store::StoreOptions; use anyhow::{bail, Context, Result}; use clap::Parser; use std::path::PathBuf; use wasmer::*; #[derive(Debug, Parser)] /// The options for the `wasmer validate` subcommand pub struct Validate { /// File to validate as WebAssembly #[clap(name = "FILE", parse(from_os_str))] path: PathBuf, #[clap(flatten)] store: StoreOptions, } impl Validate { /// Runs logic for the `validate` subcommand pub fn execute(&self) -> Result<()> { self.inner_execute() .context(format!("failed to validate `{}`", self.path.display())) } fn inner_execute(&self) -> Result<()> { let (store, _compiler_type) = self.store.get_store()?; let module_contents = std::fs::read(&self.path)?; if !is_wasm(&module_contents) { bail!("`wasmer validate` only validates WebAssembly files"); } Module::validate(&store, &module_contents)?; eprintln!("Validation passed for `{}`.", self.path.display()); Ok(()) } }