diff options
author | Justus Winter <justus@sequoia-pgp.org> | 2019-09-17 14:15:26 +0200 |
---|---|---|
committer | Justus Winter <justus@sequoia-pgp.org> | 2019-09-17 14:15:26 +0200 |
commit | e4220d83a084dd05381b3afeb90200e0e50e3204 (patch) | |
tree | 4dabe6a538b9d4ee2bac74de0a25809c111f2887 /openpgp/src/packet/mod.rs | |
parent | 0227b4e9c87820b01f4bd3f6969ade8e511e637c (diff) |
openpgp: Make packet::Common::children private.
Diffstat (limited to 'openpgp/src/packet/mod.rs')
-rw-r--r-- | openpgp/src/packet/mod.rs | 38 |
1 files changed, 31 insertions, 7 deletions
diff --git a/openpgp/src/packet/mod.rs b/openpgp/src/packet/mod.rs index b048e271..a3f81168 100644 --- a/openpgp/src/packet/mod.rs +++ b/openpgp/src/packet/mod.rs @@ -118,7 +118,7 @@ pub struct Common { /// [`PacketPile`]: ../struct.PacketPile.html /// [`PacketPile::from_file`]: ../struct.PacketPile.html#method.from_file /// [`PacketParser`]: ../parse/struct.PacketParser.html - pub children: Option<Container>, + children: Option<Container>, /// Holds a packet's body. /// @@ -186,16 +186,40 @@ impl Default for Common { } impl Common { + pub(crate) // for packet_pile.rs + fn children_ref(&self) -> Option<&Container> { + self.children.as_ref() + } + + pub(crate) // for packet_pile.rs + fn children_mut(&mut self) -> Option<&mut Container> { + self.children.as_mut() + } + + pub(crate) // for packet_pile.rs + fn set_children(&mut self, v: Option<Container>) -> Option<Container> { + std::mem::replace(&mut self.children, v) + } + + fn children_iter<'a>(&'a self) -> slice::Iter<'a, Packet> { + if let Some(ref container) = self.children { + container.packets.iter() + } else { + let empty_packet_slice : &[Packet] = &[]; + empty_packet_slice.iter() + } + } + + /// Returns an iterator over the packet's immediate children. + pub fn children<'a>(&'a self) -> impl Iterator<Item = &'a Packet> { + self.children_iter() + } + /// Returns an iterator over all of the packet's descendants, in /// depth-first order. pub fn descendants(&self) -> Iter { return Iter { - children: if let Some(ref container) = self.children { - container.packets.iter() - } else { - let empty_packet_slice : &[Packet] = &[]; - empty_packet_slice.iter() - }, + children: self.children_iter(), child: None, grandchildren: None, depth: 0, |