diff options
author | Justus Winter <justus@sequoia-pgp.org> | 2018-11-16 11:04:36 +0100 |
---|---|---|
committer | Justus Winter <justus@sequoia-pgp.org> | 2018-12-14 14:05:21 +0100 |
commit | d411fb80983a4d4ebb9f023599c38e34a26551e7 (patch) | |
tree | fc970ff950923f7c400b24163f4079b3c6ba48cf /openpgp/src/message | |
parent | 251541318fdf453c5d756794b906cce2fd69b675 (diff) |
openpgp: Introduce trait Parse.
- Trait Parse introduces a uniform interface to parse packets,
messages, keys, and related data structures.
Diffstat (limited to 'openpgp/src/message')
-rw-r--r-- | openpgp/src/message/mod.rs | 58 |
1 files changed, 30 insertions, 28 deletions
diff --git a/openpgp/src/message/mod.rs b/openpgp/src/message/mod.rs index b1019183..957dcbde 100644 --- a/openpgp/src/message/mod.rs +++ b/openpgp/src/message/mod.rs @@ -22,8 +22,8 @@ use Packet; use PacketPile; use Message; use packet::Literal; - use packet::Tag; +use parse::Parse; mod lexer; mod grammar; @@ -289,6 +289,35 @@ impl fmt::Debug for Message { } } +impl<'a> Parse<'a, Message> for Message { + /// Reads a `Message` from the specified reader. + /// + /// See [`Message::from_packet_pile`] for more details. + /// + /// [`Message::from_packet_pile`]: #method.from_packet_pile + fn from_reader<R: 'a + io::Read>(reader: R) -> Result<Self> { + Self::from_packet_pile(PacketPile::from_reader(reader)?) + } + + /// Reads a `Message` from the specified file. + /// + /// See [`Message::from_packet_pile`] for more details. + /// + /// [`Message::from_packet_pile`]: #method.from_packet_pile + fn from_file<P: AsRef<Path>>(path: P) -> Result<Self> { + Self::from_packet_pile(PacketPile::from_file(path)?) + } + + /// Reads a `Message` from `buf`. + /// + /// See [`Message::from_packet_pile`] for more details. + /// + /// [`Message::from_packet_pile`]: #method.from_packet_pile + fn from_bytes(buf: &'a [u8]) -> Result<Self> { + Self::from_packet_pile(PacketPile::from_bytes(buf)?) + } +} + impl Message { /// Converts the `PacketPile` to a `Message`. /// @@ -342,33 +371,6 @@ impl Message { Self::from_packet_pile(PacketPile::from_packets(packets)) } - /// Reads a `Message` from the specified reader. - /// - /// See [`Message::from_packet_pile`] for more details. - /// - /// [`Message::from_packet_pile`]: #method.from_packet_pile - pub fn from_reader<R: io::Read>(reader: R) -> Result<Self> { - Self::from_packet_pile(PacketPile::from_reader(reader)?) - } - - /// Reads a `Message` from the specified file. - /// - /// See [`Message::from_packet_pile`] for more details. - /// - /// [`Message::from_packet_pile`]: #method.from_packet_pile - pub fn from_file<P: AsRef<Path>>(path: P) -> Result<Self> { - Self::from_packet_pile(PacketPile::from_file(path)?) - } - - /// Reads a `Message` from `buf`. - /// - /// See [`Message::from_packet_pile`] for more details. - /// - /// [`Message::from_packet_pile`]: #method.from_packet_pile - pub fn from_bytes(buf: &[u8]) -> Result<Self> { - Self::from_packet_pile(PacketPile::from_bytes(buf)?) - } - /// Converts the `Message` to a `PacketPile`. pub fn to_packet_pile(self) -> PacketPile { self.pile |