summaryrefslogtreecommitdiffstats
path: root/openpgp/src/parse
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/parse
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/parse')
-rw-r--r--openpgp/src/parse/packet_parser_builder.rs11
-rw-r--r--openpgp/src/parse/packet_pile_parser.rs7
-rw-r--r--openpgp/src/parse/stream.rs21
3 files changed, 39 insertions, 0 deletions
diff --git a/openpgp/src/parse/packet_parser_builder.rs b/openpgp/src/parse/packet_parser_builder.rs
index 02a83ad3..2b52efd5 100644
--- a/openpgp/src/parse/packet_parser_builder.rs
+++ b/openpgp/src/parse/packet_parser_builder.rs
@@ -99,6 +99,17 @@ pub struct PacketParserBuilder<'a> {
assert_send_and_sync!(PacketParserBuilder<'_>);
impl<'a> Parse<'a, PacketParserBuilder<'a>> for PacketParserBuilder<'a> {
+ /// Starts parsing an OpenPGP object stored in a `BufferedReader` object.
+ ///
+ /// This function returns a `PacketParser` for the first packet in
+ /// the stream.
+ fn from_buffered_reader<R>(reader: R) -> Result<PacketParserBuilder<'a>>
+ where
+ R: BufferedReader<Cookie> + 'a,
+ {
+ PacketParserBuilder::from_cookie_reader(reader.into_boxed())
+ }
+
/// Creates a `PacketParserBuilder` for an OpenPGP message stored
/// in a `std::io::Read` object.
fn from_reader<R: io::Read + 'a + Send + Sync>(reader: R) -> Result<Self> {
diff --git a/openpgp/src/parse/packet_pile_parser.rs b/openpgp/src/parse/packet_pile_parser.rs
index ea65912e..b06cf6d8 100644
--- a/openpgp/src/parse/packet_pile_parser.rs
+++ b/openpgp/src/parse/packet_pile_parser.rs
@@ -218,6 +218,13 @@ impl<'a> TryFrom<PacketParserBuilder<'a>> for PacketPileParser<'a> {
}
impl<'a> Parse<'a, PacketPileParser<'a>> for PacketPileParser<'a> {
+ fn from_buffered_reader<R>(reader: R) -> Result<PacketPileParser<'a>>
+ where
+ R: BufferedReader<Cookie> + 'a
+ {
+ PacketPileParser::from_cookie_reader(reader.into_boxed())
+ }
+
/// Creates a `PacketPileParser` to parse the OpenPGP message stored
/// in the `io::Read` object.
fn from_reader<R: io::Read + 'a + Send + Sync>(reader: R)
diff --git a/openpgp/src/parse/stream.rs b/openpgp/src/parse/stream.rs
index 288df6ac..63d42507 100644
--- a/openpgp/src/parse/stream.rs
+++ b/openpgp/src/parse/stream.rs
@@ -1059,6 +1059,13 @@ assert_send_and_sync!(VerifierBuilder<'_>);
impl<'a> Parse<'a, VerifierBuilder<'a>>
for VerifierBuilder<'a>
{
+ fn from_buffered_reader<R>(reader: R) -> Result<VerifierBuilder<'a>>
+ where
+ R: BufferedReader<Cookie> + 'a,
+ {
+ VerifierBuilder::new(reader)
+ }
+
fn from_reader<R>(reader: R) -> Result<VerifierBuilder<'a>>
where R: io::Read + 'a + Send + Sync,
{
@@ -1460,6 +1467,13 @@ assert_send_and_sync!(DetachedVerifierBuilder<'_>);
impl<'a> Parse<'a, DetachedVerifierBuilder<'a>>
for DetachedVerifierBuilder<'a>
{
+ fn from_buffered_reader<R>(reader: R) -> Result<DetachedVerifierBuilder<'a>>
+ where
+ R: BufferedReader<Cookie> + 'a,
+ {
+ DetachedVerifierBuilder::new(reader)
+ }
+
fn from_reader<R>(reader: R) -> Result<DetachedVerifierBuilder<'a>>
where R: io::Read + 'a + Send + Sync,
{
@@ -1817,6 +1831,13 @@ assert_send_and_sync!(DecryptorBuilder<'_>);
impl<'a> Parse<'a, DecryptorBuilder<'a>>
for DecryptorBuilder<'a>
{
+ fn from_buffered_reader<R>(reader: R) -> Result<DecryptorBuilder<'a>>
+ where
+ R: BufferedReader<Cookie> + 'a,
+ {
+ DecryptorBuilder::new(reader)
+ }
+
fn from_reader<R>(reader: R) -> Result<DecryptorBuilder<'a>>
where R: io::Read + 'a + Send + Sync,
{