diff options
author | Justus Winter <justus@sequoia-pgp.org> | 2024-01-15 18:23:43 +0100 |
---|---|---|
committer | Justus Winter <justus@sequoia-pgp.org> | 2024-01-22 13:05:38 +0100 |
commit | f396703a0ca809ce6200d7cb009a9bc83dd6683a (patch) | |
tree | d7d5050354849951568ac3155b2069b8ce94a810 | |
parent | 9582ba1a068402e880a1cf3e5b4bb481733953fb (diff) |
openpgp: Simplify Parse implementations by using the macro.
-rw-r--r-- | openpgp/src/parse.rs | 53 |
1 files changed, 20 insertions, 33 deletions
diff --git a/openpgp/src/parse.rs b/openpgp/src/parse.rs index 4e18acee..1ecf63b2 100644 --- a/openpgp/src/parse.rs +++ b/openpgp/src/parse.rs @@ -1099,15 +1099,12 @@ impl S2K { } } -impl<'a> Parse<'a, S2K> for S2K { - /// Reads an S2K from `reader`. - fn from_reader<R: 'a + Read + Send + Sync>(reader: R) -> Result<Self> { - let bio = buffered_reader::Generic::with_cookie( - reader, None, Cookie::default()); +impl_parse_with_buffered_reader!( + S2K, + |bio: Box<dyn BufferedReader<Cookie>>| -> Result<Self> { let mut parser = PacketHeaderParser::new_naked(bio.into_boxed()); Self::parse_v4(&mut parser) - } -} + }); impl Header { pub(crate) fn parse<R: BufferedReader<C>, C: fmt::Debug + Send + Sync> (bio: &mut R) @@ -1123,18 +1120,11 @@ impl Header { } } -impl<'a> Parse<'a, Header> for Header { - /// Parses an OpenPGP packet's header as described in [Section 4.2 - /// of RFC 4880]. - /// - /// [Section 4.2 of RFC 4880]: https://tools.ietf.org/html/rfc4880#section-4.2 - fn from_reader<R: 'a + Read + Send + Sync>(reader: R) -> Result<Self> - { - let mut reader = buffered_reader::Generic::with_cookie( - reader, None, Cookie::default()); +impl_parse_with_buffered_reader!( + Header, + |mut reader| -> Result<Self> { Header::parse(&mut reader) - } -} + }); impl BodyLength { /// Decodes a new format body length as described in [Section @@ -2209,8 +2199,9 @@ fn one_pass_sig_parser_test () { } } -impl<'a> Parse<'a, OnePassSig3> for OnePassSig3 { - fn from_reader<R: 'a + Read + Send + Sync>(reader: R) -> Result<Self> { +impl_parse_with_buffered_reader!( + OnePassSig3, + |reader| -> Result<Self> { OnePassSig::from_reader(reader).map(|p| match p { OnePassSig::V3(p) => p, // XXX: Once we have a second variant. @@ -2218,8 +2209,7 @@ impl<'a> Parse<'a, OnePassSig3> for OnePassSig3 { // p => Err(Error::InvalidOperation( // format!("Not a OnePassSig::V3 packet: {:?}", p)).into()), }) - } -} + }); #[test] fn one_pass_sig_test () { @@ -3169,15 +3159,12 @@ impl MPI { } } -impl<'a> Parse<'a, MPI> for MPI { - // Reads an MPI from `reader`. - fn from_reader<R: io::Read + Send + Sync>(reader: R) -> Result<Self> { - let bio = buffered_reader::Generic::with_cookie( - reader, None, Cookie::default()); +impl_parse_with_buffered_reader!( + MPI, + |bio: Box<dyn BufferedReader<Cookie>>| -> Result<Self> { let mut parser = PacketHeaderParser::new_naked(bio.into_boxed()); Self::parse("(none_len)", "(none)", &mut parser) - } -} + }); impl ProtectedMPI { /// Parses an OpenPGP MPI containing secrets. @@ -3223,8 +3210,9 @@ impl PKESK3 { } } -impl<'a> Parse<'a, PKESK3> for PKESK3 { - fn from_reader<R: 'a + Read + Send + Sync>(reader: R) -> Result<Self> { +impl_parse_with_buffered_reader!( + PKESK3, + |reader| -> Result<Self> { PKESK::from_reader(reader).map(|p| match p { PKESK::V3(p) => p, // XXX: Once we have a second variant. @@ -3232,8 +3220,7 @@ impl<'a> Parse<'a, PKESK3> for PKESK3 { // p => Err(Error::InvalidOperation( // format!("Not a PKESKv3 packet: {:?}", p)).into()), }) - } -} + }); impl<'a> Parse<'a, Packet> for Packet { fn from_reader<R: 'a + Read + Send + Sync>(reader: R) -> Result<Self> { |