cmail_rpgp/packet/
mod_detection_code.rs1use std::io;
2
3use crate::errors::Result;
4use crate::packet::PacketTrait;
5use crate::ser::Serialize;
6use crate::types::{Tag, Version};
7
8#[derive(derive_more::Debug, Clone, PartialEq, Eq)]
20pub struct ModDetectionCode {
21 packet_version: Version,
22 #[debug("{}", hex::encode(hash))]
24 hash: [u8; 20],
25}
26
27impl ModDetectionCode {
28 pub fn from_slice(packet_version: Version, input: &[u8]) -> Result<Self> {
30 ensure_eq!(input.len(), 20, "invalid input len");
31
32 let mut hash = [0u8; 20];
33 hash.copy_from_slice(input);
34
35 Ok(ModDetectionCode {
36 packet_version,
37 hash,
38 })
39 }
40}
41
42impl Serialize for ModDetectionCode {
43 fn to_writer<W: io::Write>(&self, writer: &mut W) -> Result<()> {
44 writer.write_all(&self.hash[..])?;
45 Ok(())
46 }
47}
48
49impl PacketTrait for ModDetectionCode {
50 fn packet_version(&self) -> Version {
51 self.packet_version
52 }
53
54 fn tag(&self) -> Tag {
55 Tag::ModDetectionCode
56 }
57}