use super::AzureTlvs;
use crate::error::TlvParseError;
const PP2_SUBTYPE_AZURE_PRIVATEENDPOINT_LINKID: u8 = 0x01;
pub(crate) fn parse_azure_tlv(data: &[u8]) -> Result<AzureTlvs, TlvParseError> {
if data.is_empty() {
return Err(TlvParseError::MalformedSubTlv { offset: 0 });
}
let sub_type = data[0];
let value = &data[1..];
let mut azure = AzureTlvs {
private_endpoint_link_id: None,
raw: vec![(sub_type, value.to_vec())],
};
if sub_type == PP2_SUBTYPE_AZURE_PRIVATEENDPOINT_LINKID {
if value.len() != 4 {
return Err(TlvParseError::InvalidValue {
reason: format!(
"Azure Private Endpoint LinkID must be 4 bytes, got {}",
value.len()
),
});
}
azure.private_endpoint_link_id =
Some(u32::from_le_bytes([value[0], value[1], value[2], value[3]]));
}
Ok(azure)
}