hickory_proto/rr/rdata/
openpgpkey.rs1use alloc::vec::Vec;
10use core::fmt;
11
12#[cfg(feature = "serde")]
13use serde::{Deserialize, Serialize};
14
15use crate::{
16 error::ProtoResult,
17 rr::{RData, RecordData, RecordDataDecodable, RecordType},
18 serialize::binary::{BinDecoder, BinEncodable, BinEncoder, Restrict},
19};
20
21#[cfg_attr(feature = "serde", derive(Deserialize, Serialize))]
29#[derive(Debug, PartialEq, Eq, Hash, Clone)]
30pub struct OPENPGPKEY {
31 public_key: Vec<u8>,
32}
33
34impl OPENPGPKEY {
35 pub fn new(public_key: Vec<u8>) -> Self {
42 Self { public_key }
43 }
44
45 pub fn public_key(&self) -> &[u8] {
48 &self.public_key
49 }
50}
51
52impl BinEncodable for OPENPGPKEY {
53 fn emit(&self, encoder: &mut BinEncoder<'_>) -> ProtoResult<()> {
54 encoder.emit_vec(self.public_key())
55 }
56}
57
58impl<'r> RecordDataDecodable<'r> for OPENPGPKEY {
59 fn read_data(decoder: &mut BinDecoder<'r>, length: Restrict<u16>) -> ProtoResult<Self> {
60 let rdata_length = length.map(usize::from).unverified();
61 let public_key =
62 decoder.read_vec(rdata_length)?.unverified();
63 Ok(Self::new(public_key))
64 }
65}
66
67impl RecordData for OPENPGPKEY {
68 fn try_from_rdata(data: RData) -> Result<Self, RData> {
69 match data {
70 RData::OPENPGPKEY(csync) => Ok(csync),
71 _ => Err(data),
72 }
73 }
74
75 fn try_borrow(data: &RData) -> Option<&Self> {
76 match data {
77 RData::OPENPGPKEY(csync) => Some(csync),
78 _ => None,
79 }
80 }
81
82 fn record_type(&self) -> RecordType {
83 RecordType::OPENPGPKEY
84 }
85
86 fn into_rdata(self) -> RData {
87 RData::OPENPGPKEY(self)
88 }
89}
90
91impl fmt::Display for OPENPGPKEY {
104 fn fmt(&self, f: &mut fmt::Formatter<'_>) -> Result<(), fmt::Error> {
105 f.write_str(&data_encoding::BASE64.encode(&self.public_key))
106 }
107}
108
109