summaryrefslogtreecommitdiffstats
path: root/openpgp/src/message
diff options
context:
space:
mode:
authorJustus Winter <justus@sequoia-pgp.org>2024-01-15 18:35:00 +0100
committerJustus Winter <justus@sequoia-pgp.org>2024-01-22 13:48:32 +0100
commitb838d4b1bfc4b432e908741c94b336df19d201ad (patch)
treeaf9d9a77b046f8de9d9887aeae99a683b2c16565 /openpgp/src/message
parent96d829d681ea1b860bf4b16439082929f4636147 (diff)
openpgp: Add Parse::from_buffered_reader.
- Add a buffered-reader-based function to trait Parse. This allows us to manipulate the buffered reader stack before and after parsing, e.g. to parse several armored objects in one stream. The CertParser also does this, but uses internal interfaces for that.
Diffstat (limited to 'openpgp/src/message')
-rw-r--r--openpgp/src/message/mod.rs16
1 files changed, 15 insertions, 1 deletions
diff --git a/openpgp/src/message/mod.rs b/openpgp/src/message/mod.rs
index 5a9d3b1f..d6da5a8f 100644
--- a/openpgp/src/message/mod.rs
+++ b/openpgp/src/message/mod.rs
@@ -29,13 +29,15 @@ use std::fmt;
use std::io;
use std::path::Path;
+use buffered_reader::BufferedReader;
+
use crate::Result;
use crate::Error;
use crate::Packet;
use crate::PacketPile;
use crate::packet::Literal;
use crate::packet::Tag;
-use crate::parse::Parse;
+use crate::parse::{Cookie, Parse};
mod lexer;
lalrpop_util::lalrpop_mod!(#[allow(clippy::all, deprecated)] grammar, "/message/grammar.rs");
@@ -348,6 +350,18 @@ impl<'a> Parse<'a, Message> for Message {
/// See [`Message::try_from`] for more details.
///
/// [`Message::try_from`]: Message::try_from()
+ fn from_buffered_reader<R>(reader: R) -> Result<Message>
+ where
+ R: BufferedReader<Cookie> + 'a,
+ {
+ Self::try_from(PacketPile::from_buffered_reader(reader)?)
+ }
+
+ /// Reads a `Message` from the specified reader.
+ ///
+ /// See [`Message::try_from`] for more details.
+ ///
+ /// [`Message::try_from`]: Message::try_from()
fn from_reader<R: 'a + io::Read + Send + Sync>(reader: R) -> Result<Self> {
Self::try_from(PacketPile::from_reader(reader)?)
}