summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJustus Winter <justus@sequoia-pgp.org>2021-04-07 12:51:48 +0200
committerJustus Winter <justus@sequoia-pgp.org>2021-04-08 12:58:34 +0200
commitce74b3c668b16dd6bdb3e2c2450c17dbbd9dc815 (patch)
tree2f947e2f6d264200ef076b2557aaf804a30aead6
parent6432f9dd143e10bb1475df059d9f275981010fad (diff)
openpgp: Add missing methods for PacketRef.
-rw-r--r--openpgp/src/packet/container.rs2
-rw-r--r--openpgp/src/packet/mod.rs2
-rw-r--r--openpgp/src/serialize.rs44
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> {}