tpm2_protocol/macro/
integer.rs1#[macro_export]
6macro_rules! tpm_integer {
7 ($ty:ty, $variant:ident) => {
8 impl TpmParse for $ty {
9 fn parse(buf: &[u8]) -> TpmResult<(Self, &[u8])> {
10 let size = size_of::<$ty>();
11 let bytes = buf.get(..size).ok_or(TpmError::DataTruncated)?;
12 let array = bytes.try_into().map_err(|_| TpmError::MalformedData)?;
13 let val = <$ty>::from_be_bytes(array);
14 Ok((val, &buf[size..]))
15 }
16 }
17
18 impl TpmBuild for $ty {
19 fn build(&self, writer: &mut TpmWriter) -> TpmResult<()> {
20 writer.write_bytes(&self.to_be_bytes())
21 }
22 }
23
24 impl TpmSized for $ty {
25 const SIZE: usize = size_of::<$ty>();
26 fn len(&self) -> usize {
27 Self::SIZE
28 }
29 }
30
31 impl core::convert::From<$ty> for TpmDiscriminant {
32 fn from(value: $ty) -> Self {
33 Self::$variant(value.into())
34 }
35 }
36 };
37}