use crate::{Producers, rewrite_wasm};
use anyhow::Result;
use std::fmt::Debug;
#[derive(Debug, Clone, Default)]
#[non_exhaustive]
pub struct AddMetadata {
pub name: AddMetadataField<String>,
pub language: Vec<(String, String)>,
pub processed_by: Vec<(String, String)>,
pub sdk: Vec<(String, String)>,
#[cfg(feature = "oci")]
pub authors: AddMetadataField<crate::Authors>,
#[cfg(feature = "oci")]
pub description: AddMetadataField<crate::Description>,
#[cfg(feature = "oci")]
pub licenses: AddMetadataField<crate::Licenses>,
#[cfg(feature = "oci")]
pub source: AddMetadataField<crate::Source>,
#[cfg(feature = "oci")]
pub homepage: AddMetadataField<crate::Homepage>,
#[cfg(feature = "oci")]
pub revision: AddMetadataField<crate::Revision>,
#[cfg(feature = "oci")]
pub version: AddMetadataField<crate::Version>,
}
impl AddMetadata {
pub fn to_wasm(&self, input: &[u8]) -> Result<Vec<u8>> {
let add_producers = Producers::from_meta(self);
rewrite_wasm(self, &add_producers, input)
}
}
#[derive(Debug, Clone)]
pub enum AddMetadataField<T: Debug + Clone> {
Keep,
Clear,
Set(T),
}
impl<T: Debug + Clone> AddMetadataField<T> {
pub fn is_clear(&self) -> bool {
matches!(self, Self::Clear)
}
pub fn is_keep(&self) -> bool {
matches!(self, Self::Keep)
}
}
impl<T: Debug + Clone> Default for AddMetadataField<T> {
fn default() -> Self {
Self::Keep
}
}