wasm_metadata/
add_metadata.rs1use crate::{rewrite_wasm, Producers};
2use anyhow::Result;
3
4#[cfg_attr(feature = "clap", derive(clap::Parser))]
9#[derive(Debug, Clone, Default)]
10#[non_exhaustive]
11pub struct AddMetadata {
12 #[cfg_attr(feature = "clap", clap(long, value_name = "NAME"))]
14 pub name: Option<String>,
15
16 #[cfg_attr(feature = "clap", clap(long, value_parser = parse_key_value, value_name = "NAME=VERSION"))]
18 pub language: Vec<(String, String)>,
19
20 #[cfg_attr(feature = "clap", clap(long = "processed-by", value_parser = parse_key_value, value_name="NAME=VERSION"))]
22 pub processed_by: Vec<(String, String)>,
23
24 #[cfg_attr(feature="clap", clap(long, value_parser = parse_key_value, value_name="NAME=VERSION"))]
26 pub sdk: Vec<(String, String)>,
27
28 #[cfg_attr(feature = "clap", clap(long, value_name = "NAME"))]
31 #[cfg(feature = "oci")]
32 pub authors: Option<crate::Authors>,
33
34 #[cfg_attr(feature = "clap", clap(long, value_name = "NAME"))]
36 #[cfg(feature = "oci")]
37 pub description: Option<crate::Description>,
38
39 #[cfg_attr(feature = "clap", clap(long, value_name = "NAME"))]
41 #[cfg(feature = "oci")]
42 pub licenses: Option<crate::Licenses>,
43
44 #[cfg_attr(feature = "clap", clap(long, value_name = "NAME"))]
46 #[cfg(feature = "oci")]
47 pub source: Option<crate::Source>,
48
49 #[cfg_attr(feature = "clap", clap(long, value_name = "NAME"))]
51 #[cfg(feature = "oci")]
52 pub homepage: Option<crate::Homepage>,
53
54 #[cfg_attr(feature = "clap", clap(long, value_name = "NAME"))]
56 #[cfg(feature = "oci")]
57 pub revision: Option<crate::Revision>,
58
59 #[cfg_attr(feature = "clap", clap(long, value_name = "NAME"))]
61 #[cfg(feature = "oci")]
62 pub version: Option<crate::Version>,
63}
64
65#[cfg(feature = "clap")]
66pub(crate) fn parse_key_value(s: &str) -> Result<(String, String)> {
67 s.split_once('=')
68 .map(|(k, v)| (k.to_owned(), v.to_owned()))
69 .ok_or_else(|| anyhow::anyhow!("expected KEY=VALUE"))
70}
71
72impl AddMetadata {
73 pub fn to_wasm(&self, input: &[u8]) -> Result<Vec<u8>> {
77 let add_producers = Producers::from_meta(self);
78 rewrite_wasm(self, &add_producers, input)
79 }
80}