blob: 406dc9a3a9aa2a4fb19e97ae3b29669e541d88db [file] [log] [blame]
// SPDX-License-Identifier: MIT OR Apache-2.0
// Copyright (c) 2025 Opinsys Oy
// Copyright (c) 2024-2025 Jarkko Sakkinen
#[macro_export]
macro_rules! tpm_integer {
($ty:ty, $variant:ident) => {
impl TpmParse for $ty {
fn parse(buf: &[u8]) -> TpmResult<(Self, &[u8])> {
let size = size_of::<$ty>();
let bytes = buf.get(..size).ok_or(TpmError::TruncatedData)?;
let array = bytes.try_into().map_err(|_| TpmError::MalformedData)?;
let val = <$ty>::from_be_bytes(array);
Ok((val, &buf[size..]))
}
}
impl TpmBuild for $ty {
fn build(&self, writer: &mut TpmWriter) -> TpmResult<()> {
writer.write_bytes(&self.to_be_bytes())
}
}
impl TpmSized for $ty {
const SIZE: usize = size_of::<$ty>();
fn len(&self) -> usize {
Self::SIZE
}
}
impl core::convert::From<$ty> for TpmDiscriminant {
fn from(value: $ty) -> Self {
Self::$variant(value.into())
}
}
};
}