use std::collections::HashMap;
use secrecy::zeroize::{Zeroize, ZeroizeOnDrop};
use serde::{Deserialize, Serialize};
use crate::{ComponentId, LatticeTarget, WitInterface, WitNamespace, WitPackage};
pub type LinkName = String;
#[derive(Clone, Debug, Default, Deserialize, Serialize)]
pub struct InterfaceLinkDefinition {
pub source_id: ComponentId,
pub target: LatticeTarget,
#[serde(default = "default_link_name")]
pub name: LinkName,
pub wit_namespace: WitNamespace,
pub wit_package: WitPackage,
pub interfaces: Vec<WitInterface>,
#[serde(default)]
pub source_config: HashMap<String, String>,
#[serde(default)]
pub target_config: HashMap<String, String>,
#[serde(default)]
pub source_secrets: Option<Vec<u8>>,
#[serde(default)]
pub target_secrets: Option<Vec<u8>>,
}
impl ZeroizeOnDrop for InterfaceLinkDefinition {}
impl Zeroize for InterfaceLinkDefinition {
fn zeroize(&mut self) {
self.source_secrets.zeroize();
self.target_secrets.zeroize();
}
}
pub(crate) fn default_link_name() -> LinkName {
"default".to_string()
}