diff options
author | Justus Winter <justus@sequoia-pgp.org> | 2021-04-07 12:51:48 +0200 |
---|---|---|
committer | Justus Winter <justus@sequoia-pgp.org> | 2021-04-08 12:58:34 +0200 |
commit | ce74b3c668b16dd6bdb3e2c2450c17dbbd9dc815 (patch) | |
tree | 2f947e2f6d264200ef076b2557aaf804a30aead6 | |
parent | 6432f9dd143e10bb1475df059d9f275981010fad (diff) |
openpgp: Add missing methods for PacketRef.
-rw-r--r-- | openpgp/src/packet/container.rs | 2 | ||||
-rw-r--r-- | openpgp/src/packet/mod.rs | 2 | ||||
-rw-r--r-- | openpgp/src/serialize.rs | 44 |
3 files changed, 48 insertions, 0 deletions
diff --git a/openpgp/src/packet/container.rs b/openpgp/src/packet/container.rs index 66835548..1e511c6d 100644 --- a/openpgp/src/packet/container.rs +++ b/openpgp/src/packet/container.rs @@ -410,6 +410,8 @@ macro_rules! impl_body_forwards { impl Packet { pub(crate) // for packet_pile.rs fn container_ref(&self) -> Option<&Container> { + // XXX: If you change this function, also change + // PacketRef::container_ref. use std::ops::Deref; match self { Packet::CompressedData(p) => Some(p.deref()), diff --git a/openpgp/src/packet/mod.rs b/openpgp/src/packet/mod.rs index da4c621c..e23445df 100644 --- a/openpgp/src/packet/mod.rs +++ b/openpgp/src/packet/mod.rs @@ -377,6 +377,8 @@ impl Deref for Packet { type Target = Common; fn deref(&self) -> &Self::Target { + // XXX: If you change this function, also change + // PacketRef::deref. match self { &Packet::Unknown(ref packet) => &packet.common, &Packet::Signature(ref packet) => &packet.common, diff --git a/openpgp/src/serialize.rs b/openpgp/src/serialize.rs index 8ffdf94a..09a84e61 100644 --- a/openpgp/src/serialize.rs +++ b/openpgp/src/serialize.rs @@ -2729,6 +2729,37 @@ enum PacketRef<'a> { AED(&'a packet::AED), } +// Allow transparent access of common fields. +impl Deref for PacketRef<'_> { + type Target = crate::packet::Common; + + fn deref(&self) -> &Self::Target { + // XXX: If you change this function, also change + // Packet::deref. + match self { + PacketRef::Unknown(p) => &p.common, + PacketRef::Signature(p) => &p.common, + PacketRef::OnePassSig(p) => &p.common, + PacketRef::PublicKey(p) => &p.common, + PacketRef::PublicSubkey(p) => &p.common, + PacketRef::SecretKey(p) => &p.common, + PacketRef::SecretSubkey(p) => &p.common, + PacketRef::Marker(p) => &p.common, + PacketRef::Trust(p) => &p.common, + PacketRef::UserID(p) => &p.common, + PacketRef::UserAttribute(p) => &p.common, + PacketRef::Literal(p) => &p.common, + PacketRef::CompressedData(p) => &p.common, + PacketRef::PKESK(p) => &p.common, + PacketRef::SKESK(SKESK::V4(p)) => &p.common, + PacketRef::SKESK(SKESK::V5(p)) => &p.skesk4.common, + PacketRef::SEIP(p) => &p.common, + PacketRef::MDC(p) => &p.common, + PacketRef::AED(p) => &p.common, + } + } +} + impl<'a> PacketRef<'a> { /// Returns the `PacketRef's` corresponding OpenPGP tag. /// @@ -2757,6 +2788,19 @@ impl<'a> PacketRef<'a> { PacketRef::AED(_) => Tag::AED, } } + + fn container_ref(&self) -> Option<&Container> { + // XXX: If you change this function, also change + // Packet::container_ref. + match self { + PacketRef::CompressedData(p) => Some(p.deref()), + PacketRef::SEIP(p) => Some(p.deref()), + PacketRef::AED(p) => Some(p.deref()), + PacketRef::Literal(p) => Some(p.container_ref()), + PacketRef::Unknown(p) => Some(p.container_ref()), + _ => None, + } + } } impl<'a> Serialize for PacketRef<'a> {} |