diff options
author | Justus Winter <justus@sequoia-pgp.org> | 2024-01-15 18:35:00 +0100 |
---|---|---|
committer | Justus Winter <justus@sequoia-pgp.org> | 2024-01-22 13:48:32 +0100 |
commit | b838d4b1bfc4b432e908741c94b336df19d201ad (patch) | |
tree | af9d9a77b046f8de9d9887aeae99a683b2c16565 /openpgp/src/message | |
parent | 96d829d681ea1b860bf4b16439082929f4636147 (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.rs | 16 |
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)?) } |