/rust/registry/src/index.crates.io-6f17d22bba15001f/der-0.7.9/src/asn1/optional.rs
Line | Count | Source (jump to first uncovered line) |
1 | | //! ASN.1 `OPTIONAL` as mapped to Rust's `Option` type |
2 | | |
3 | | use crate::{Choice, Decode, DerOrd, Encode, Length, Reader, Result, Tag, Writer}; |
4 | | use core::cmp::Ordering; |
5 | | |
6 | | impl<'a, T> Decode<'a> for Option<T> |
7 | | where |
8 | | T: Choice<'a>, // NOTE: all `Decode + Tagged` types receive a blanket `Choice` impl |
9 | | { |
10 | 29.2k | fn decode<R: Reader<'a>>(reader: &mut R) -> Result<Option<T>> { |
11 | 29.2k | if let Some(byte) = reader.peek_byte() { |
12 | 8.67k | if T::can_decode(Tag::try_from(byte)?) { |
13 | 5.23k | return T::decode(reader).map(Some); |
14 | 3.40k | } |
15 | 20.5k | } |
16 | | |
17 | 23.9k | Ok(None) |
18 | 29.2k | } <core::option::Option<crypto::x509::UniqueIdentifier<1>> as der::decode::Decode>::decode::<der::reader::nested::NestedReader<der::reader::nested::NestedReader<der::reader::slice::SliceReader>>> Line | Count | Source | 10 | 1.08k | fn decode<R: Reader<'a>>(reader: &mut R) -> Result<Option<T>> { | 11 | 1.08k | if let Some(byte) = reader.peek_byte() { | 12 | 871 | if T::can_decode(Tag::try_from(byte)?) { | 13 | 124 | return T::decode(reader).map(Some); | 14 | 743 | } | 15 | 209 | } | 16 | | | 17 | 952 | Ok(None) | 18 | 1.08k | } |
<core::option::Option<crypto::x509::UniqueIdentifier<2>> as der::decode::Decode>::decode::<der::reader::nested::NestedReader<der::reader::nested::NestedReader<der::reader::slice::SliceReader>>> Line | Count | Source | 10 | 1.05k | fn decode<R: Reader<'a>>(reader: &mut R) -> Result<Option<T>> { | 11 | 1.05k | if let Some(byte) = reader.peek_byte() { | 12 | 841 | if T::can_decode(Tag::try_from(byte)?) { | 13 | 134 | return T::decode(reader).map(Some); | 14 | 704 | } | 15 | 210 | } | 16 | | | 17 | 914 | Ok(None) | 18 | 1.05k | } |
<core::option::Option<der::asn1::octet_string::OctetStringRef> as der::decode::Decode>::decode::<der::reader::nested::NestedReader<der::reader::nested::NestedReader<der::reader::nested::NestedReader<der::reader::nested::NestedReader<der::reader::nested::NestedReader<der::reader::slice::SliceReader>>>>>> Line | Count | Source | 10 | 11.1k | fn decode<R: Reader<'a>>(reader: &mut R) -> Result<Option<T>> { | 11 | 11.1k | if let Some(byte) = reader.peek_byte() { | 12 | 2.37k | if T::can_decode(Tag::try_from(byte)?) { | 13 | 2.34k | return T::decode(reader).map(Some); | 14 | 26 | } | 15 | 8.74k | } | 16 | | | 17 | 8.76k | Ok(None) | 18 | 11.1k | } |
Unexecuted instantiation: <core::option::Option<der::asn1::octet_string::OctetStringRef> as der::decode::Decode>::decode::<der::reader::nested::NestedReader<der::reader::nested::NestedReader<der::reader::nested::NestedReader<der::reader::nested::NestedReader<der::reader::slice::SliceReader>>>>> <core::option::Option<der::asn1::any::AnyRef> as der::decode::Decode>::decode::<der::reader::nested::NestedReader<der::reader::nested::NestedReader<der::reader::nested::NestedReader<der::reader::nested::NestedReader<der::reader::slice::SliceReader>>>>> Line | Count | Source | 10 | 1.20k | fn decode<R: Reader<'a>>(reader: &mut R) -> Result<Option<T>> { | 11 | 1.20k | if let Some(byte) = reader.peek_byte() { | 12 | 571 | if T::can_decode(Tag::try_from(byte)?) { | 13 | 568 | return T::decode(reader).map(Some); | 14 | 0 | } | 15 | 638 | } | 16 | | | 17 | 638 | Ok(None) | 18 | 1.20k | } |
<core::option::Option<der::asn1::any::AnyRef> as der::decode::Decode>::decode::<der::reader::nested::NestedReader<der::reader::nested::NestedReader<der::reader::nested::NestedReader<der::reader::slice::SliceReader>>>> Line | Count | Source | 10 | 2.09k | fn decode<R: Reader<'a>>(reader: &mut R) -> Result<Option<T>> { | 11 | 2.09k | if let Some(byte) = reader.peek_byte() { | 12 | 728 | if T::can_decode(Tag::try_from(byte)?) { | 13 | 724 | return T::decode(reader).map(Some); | 14 | 0 | } | 15 | 1.36k | } | 16 | | | 17 | 1.36k | Ok(None) | 18 | 2.09k | } |
<core::option::Option<der::asn1::any::AnyRef> as der::decode::Decode>::decode::<der::reader::nested::NestedReader<der::reader::nested::NestedReader<der::reader::slice::SliceReader>>> Line | Count | Source | 10 | 505 | fn decode<R: Reader<'a>>(reader: &mut R) -> Result<Option<T>> { | 11 | 505 | if let Some(byte) = reader.peek_byte() { | 12 | 133 | if T::can_decode(Tag::try_from(byte)?) { | 13 | 129 | return T::decode(reader).map(Some); | 14 | 0 | } | 15 | 372 | } | 16 | | | 17 | 372 | Ok(None) | 18 | 505 | } |
<core::option::Option<crypto::x509::Extensions> as der::decode::Decode>::decode::<der::reader::nested::NestedReader<der::reader::nested::NestedReader<der::reader::slice::SliceReader>>> Line | Count | Source | 10 | 1.02k | fn decode<R: Reader<'a>>(reader: &mut R) -> Result<Option<T>> { | 11 | 1.02k | if let Some(byte) = reader.peek_byte() { | 12 | 713 | if T::can_decode(Tag::try_from(byte)?) { | 13 | 614 | return T::decode(reader).map(Some); | 14 | 96 | } | 15 | 309 | } | 16 | | | 17 | 405 | Ok(None) | 18 | 1.02k | } |
<core::option::Option<bool> as der::decode::Decode>::decode::<der::reader::nested::NestedReader<der::reader::nested::NestedReader<der::reader::nested::NestedReader<der::reader::nested::NestedReader<der::reader::nested::NestedReader<der::reader::slice::SliceReader>>>>>> Line | Count | Source | 10 | 11.1k | fn decode<R: Reader<'a>>(reader: &mut R) -> Result<Option<T>> { | 11 | 11.1k | if let Some(byte) = reader.peek_byte() { | 12 | 2.44k | if T::can_decode(Tag::try_from(byte)?) { | 13 | 598 | return T::decode(reader).map(Some); | 14 | 1.83k | } | 15 | 8.73k | } | 16 | | | 17 | 10.5k | Ok(None) | 18 | 11.1k | } |
Unexecuted instantiation: <core::option::Option<bool> as der::decode::Decode>::decode::<der::reader::nested::NestedReader<der::reader::nested::NestedReader<der::reader::nested::NestedReader<der::reader::nested::NestedReader<der::reader::slice::SliceReader>>>>> Unexecuted instantiation: <core::option::Option<_> as der::decode::Decode>::decode::<_> |
19 | | } |
20 | | |
21 | | impl<T> DerOrd for Option<T> |
22 | | where |
23 | | T: DerOrd, |
24 | | { |
25 | 0 | fn der_cmp(&self, other: &Self) -> Result<Ordering> { |
26 | 0 | match self { |
27 | 0 | Some(a) => match other { |
28 | 0 | Some(b) => a.der_cmp(b), |
29 | 0 | None => Ok(Ordering::Greater), |
30 | | }, |
31 | 0 | None => Ok(Ordering::Less), |
32 | | } |
33 | 0 | } |
34 | | } |
35 | | |
36 | | impl<T> Encode for Option<T> |
37 | | where |
38 | | T: Encode, |
39 | | { |
40 | 0 | fn encoded_len(&self) -> Result<Length> { |
41 | 0 | (&self).encoded_len() |
42 | 0 | } Unexecuted instantiation: <core::option::Option<crypto::x509::UniqueIdentifier<1>> as der::encode::Encode>::encoded_len Unexecuted instantiation: <core::option::Option<crypto::x509::UniqueIdentifier<2>> as der::encode::Encode>::encoded_len Unexecuted instantiation: <core::option::Option<der::asn1::octet_string::OctetStringRef> as der::encode::Encode>::encoded_len Unexecuted instantiation: <core::option::Option<der::asn1::any::AnyRef> as der::encode::Encode>::encoded_len Unexecuted instantiation: <core::option::Option<crypto::x509::Extensions> as der::encode::Encode>::encoded_len Unexecuted instantiation: <core::option::Option<bool> as der::encode::Encode>::encoded_len Unexecuted instantiation: <core::option::Option<_> as der::encode::Encode>::encoded_len |
43 | | |
44 | 0 | fn encode(&self, writer: &mut impl Writer) -> Result<()> { |
45 | 0 | (&self).encode(writer) |
46 | 0 | } Unexecuted instantiation: <core::option::Option<crypto::x509::UniqueIdentifier<1>> as der::encode::Encode>::encode::<der::writer::slice::SliceWriter> Unexecuted instantiation: <core::option::Option<crypto::x509::UniqueIdentifier<2>> as der::encode::Encode>::encode::<der::writer::slice::SliceWriter> Unexecuted instantiation: <core::option::Option<der::asn1::octet_string::OctetStringRef> as der::encode::Encode>::encode::<der::writer::slice::SliceWriter> Unexecuted instantiation: <core::option::Option<der::asn1::any::AnyRef> as der::encode::Encode>::encode::<der::writer::slice::SliceWriter> Unexecuted instantiation: <core::option::Option<crypto::x509::Extensions> as der::encode::Encode>::encode::<der::writer::slice::SliceWriter> Unexecuted instantiation: <core::option::Option<bool> as der::encode::Encode>::encode::<der::writer::slice::SliceWriter> Unexecuted instantiation: <core::option::Option<_> as der::encode::Encode>::encode::<_> |
47 | | } |
48 | | |
49 | | impl<T> Encode for &Option<T> |
50 | | where |
51 | | T: Encode, |
52 | | { |
53 | 0 | fn encoded_len(&self) -> Result<Length> { |
54 | 0 | match self { |
55 | 0 | Some(encodable) => encodable.encoded_len(), |
56 | 0 | None => Ok(0u8.into()), |
57 | | } |
58 | 0 | } Unexecuted instantiation: <&core::option::Option<crypto::x509::UniqueIdentifier<1>> as der::encode::Encode>::encoded_len Unexecuted instantiation: <&core::option::Option<crypto::x509::UniqueIdentifier<2>> as der::encode::Encode>::encoded_len Unexecuted instantiation: <&core::option::Option<der::asn1::octet_string::OctetStringRef> as der::encode::Encode>::encoded_len Unexecuted instantiation: <&core::option::Option<der::asn1::any::AnyRef> as der::encode::Encode>::encoded_len Unexecuted instantiation: <&core::option::Option<crypto::x509::Extensions> as der::encode::Encode>::encoded_len Unexecuted instantiation: <&core::option::Option<bool> as der::encode::Encode>::encoded_len Unexecuted instantiation: <&core::option::Option<_> as der::encode::Encode>::encoded_len |
59 | | |
60 | 0 | fn encode(&self, encoder: &mut impl Writer) -> Result<()> { |
61 | 0 | match self { |
62 | 0 | Some(encodable) => encodable.encode(encoder), |
63 | 0 | None => Ok(()), |
64 | | } |
65 | 0 | } Unexecuted instantiation: <&core::option::Option<crypto::x509::UniqueIdentifier<1>> as der::encode::Encode>::encode::<der::writer::slice::SliceWriter> Unexecuted instantiation: <&core::option::Option<crypto::x509::UniqueIdentifier<2>> as der::encode::Encode>::encode::<der::writer::slice::SliceWriter> Unexecuted instantiation: <&core::option::Option<der::asn1::octet_string::OctetStringRef> as der::encode::Encode>::encode::<der::writer::slice::SliceWriter> Unexecuted instantiation: <&core::option::Option<der::asn1::any::AnyRef> as der::encode::Encode>::encode::<der::writer::slice::SliceWriter> Unexecuted instantiation: <&core::option::Option<crypto::x509::Extensions> as der::encode::Encode>::encode::<der::writer::slice::SliceWriter> Unexecuted instantiation: <&core::option::Option<bool> as der::encode::Encode>::encode::<der::writer::slice::SliceWriter> Unexecuted instantiation: <&core::option::Option<_> as der::encode::Encode>::encode::<_> |
66 | | } |