wasm_metadata/
add_metadata.rsuse crate::{
rewrite_wasm, Author, Description, Homepage, Licenses, Producers, Revision, Source, Version,
};
use anyhow::Result;
#[cfg_attr(feature = "clap", derive(clap::Parser))]
#[derive(Debug, Clone, Default)]
pub struct AddMetadata {
#[cfg_attr(feature = "clap", clap(long, value_name = "NAME"))]
pub name: Option<String>,
#[cfg_attr(feature = "clap", clap(long, value_parser = parse_key_value, value_name = "NAME=VERSION"))]
pub language: Vec<(String, String)>,
#[cfg_attr(feature = "clap", clap(long = "processed-by", value_parser = parse_key_value, value_name="NAME=VERSION"))]
pub processed_by: Vec<(String, String)>,
#[cfg_attr(feature="clap", clap(long, value_parser = parse_key_value, value_name="NAME=VERSION"))]
pub sdk: Vec<(String, String)>,
#[cfg_attr(feature = "clap", clap(long, value_name = "NAME"))]
pub author: Option<Author>,
#[cfg_attr(feature = "clap", clap(long, value_name = "NAME"))]
pub description: Option<Description>,
#[cfg_attr(feature = "clap", clap(long, value_name = "NAME"))]
pub licenses: Option<Licenses>,
#[cfg_attr(feature = "clap", clap(long, value_name = "NAME"))]
pub source: Option<Source>,
#[cfg_attr(feature = "clap", clap(long, value_name = "NAME"))]
pub homepage: Option<Homepage>,
#[cfg_attr(feature = "clap", clap(long, value_name = "NAME"))]
pub revision: Option<Revision>,
#[cfg_attr(feature = "clap", clap(long, value_name = "NAME"))]
pub version: Option<Version>,
}
#[cfg(feature = "clap")]
pub(crate) fn parse_key_value(s: &str) -> Result<(String, String)> {
s.split_once('=')
.map(|(k, v)| (k.to_owned(), v.to_owned()))
.ok_or_else(|| anyhow::anyhow!("expected KEY=VALUE"))
}
impl AddMetadata {
pub fn to_wasm(&self, input: &[u8]) -> Result<Vec<u8>> {
rewrite_wasm(
&self.name,
&Producers::from_meta(self),
&self.author,
&self.description,
&self.licenses,
&self.source,
&self.homepage,
&self.revision,
&self.version,
input,
)
}
}