wasm_metadata/
add_metadata.rs1use crate::{
2 rewrite_wasm, Authors, Description, Homepage, Licenses, Producers, Revision, Source, Version,
3};
4
5use anyhow::Result;
6
7#[cfg_attr(feature = "clap", derive(clap::Parser))]
12#[derive(Debug, Clone, Default)]
13pub struct AddMetadata {
14 #[cfg_attr(feature = "clap", clap(long, value_name = "NAME"))]
16 pub name: Option<String>,
17
18 #[cfg_attr(feature = "clap", clap(long, value_parser = parse_key_value, value_name = "NAME=VERSION"))]
20 pub language: Vec<(String, String)>,
21
22 #[cfg_attr(feature = "clap", clap(long = "processed-by", value_parser = parse_key_value, value_name="NAME=VERSION"))]
24 pub processed_by: Vec<(String, String)>,
25
26 #[cfg_attr(feature="clap", clap(long, value_parser = parse_key_value, value_name="NAME=VERSION"))]
28 pub sdk: Vec<(String, String)>,
29
30 #[cfg_attr(feature = "clap", clap(long, value_name = "NAME"))]
33 pub authors: Option<Authors>,
34
35 #[cfg_attr(feature = "clap", clap(long, value_name = "NAME"))]
37 pub description: Option<Description>,
38
39 #[cfg_attr(feature = "clap", clap(long, value_name = "NAME"))]
41 pub licenses: Option<Licenses>,
42
43 #[cfg_attr(feature = "clap", clap(long, value_name = "NAME"))]
45 pub source: Option<Source>,
46
47 #[cfg_attr(feature = "clap", clap(long, value_name = "NAME"))]
49 pub homepage: Option<Homepage>,
50
51 #[cfg_attr(feature = "clap", clap(long, value_name = "NAME"))]
53 pub revision: Option<Revision>,
54
55 #[cfg_attr(feature = "clap", clap(long, value_name = "NAME"))]
57 pub version: Option<Version>,
58}
59
60#[cfg(feature = "clap")]
61pub(crate) fn parse_key_value(s: &str) -> Result<(String, String)> {
62 s.split_once('=')
63 .map(|(k, v)| (k.to_owned(), v.to_owned()))
64 .ok_or_else(|| anyhow::anyhow!("expected KEY=VALUE"))
65}
66
67impl AddMetadata {
68 pub fn to_wasm(&self, input: &[u8]) -> Result<Vec<u8>> {
72 rewrite_wasm(
73 &self.name,
74 &Producers::from_meta(self),
75 &self.authors,
76 &self.description,
77 &self.licenses,
78 &self.source,
79 &self.homepage,
80 &self.revision,
81 &self.version,
82 input,
83 )
84 }
85}