use crate::token;
use serde::{Deserialize, Serialize};
#[serde_with::serde_as]
#[derive(Clone, Deserialize, Serialize, Debug)]
pub struct SwComponent {
#[serde(rename = "measurement-value")]
#[serde_as(as = "serde_with::hex::Hex")]
pub mval: Vec<u8>,
#[serde(rename = "signer-id")]
#[serde_as(as = "serde_with::hex::Hex")]
pub signer_id: Vec<u8>,
#[serde(rename = "version")]
pub version: Option<String>,
#[serde(rename = "component-type")]
pub mtyp: Option<String>,
}
impl SwComponent {
pub fn new() -> Self {
Self {
mval: Default::default(),
signer_id: Default::default(),
version: Default::default(),
mtyp: Default::default(),
}
}
}
impl Default for SwComponent {
fn default() -> Self {
Self::new()
}
}
impl PartialEq<token::SwComponent> for SwComponent {
fn eq(&self, other: &token::SwComponent) -> bool {
if self.mval != other.mval {
return false;
}
if self.signer_id != other.signer_id {
return false;
}
if self.mtyp.is_some() && (other.mtyp.is_none() || Some(&self.mtyp) != Some(&other.mtyp)) {
return false;
}
if self.version.is_some()
&& (other.version.is_none() || Some(&self.version) != Some(&other.version))
{
return false;
}
true
}
}
#[serde_with::serde_as]
#[derive(Clone, Deserialize, Serialize, Debug, Default)]
pub struct PlatformRefValue {
#[serde(rename = "implementation-id")]
#[serde_as(as = "serde_with::hex::Hex")]
pub impl_id: [u8; 32],
#[serde(rename = "sw-components")]
pub sw_components: Vec<SwComponent>,
#[serde(rename = "platform-configuration")]
#[serde_as(as = "serde_with::hex::Hex")]
pub config: Vec<u8>,
}