summaryrefslogtreecommitdiffstats
path: root/openpgp/src/message
diff options
context:
space:
mode:
authorJustus Winter <justus@sequoia-pgp.org>2018-11-16 11:04:36 +0100
committerJustus Winter <justus@sequoia-pgp.org>2018-12-14 14:05:21 +0100
commitd411fb80983a4d4ebb9f023599c38e34a26551e7 (patch)
treefc970ff950923f7c400b24163f4079b3c6ba48cf /openpgp/src/message
parent251541318fdf453c5d756794b906cce2fd69b675 (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.rs58
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