/rust/registry/src/index.crates.io-1949cf8c6b5b557f/der-0.7.10/src/asn1/optional.rs
Line | Count | Source |
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 | 109k | fn decode<R: Reader<'a>>(reader: &mut R) -> Result<Option<T>> { |
11 | 109k | if let Some(byte) = reader.peek_byte() { |
12 | 78.4k | if T::can_decode(Tag::try_from(byte)?) { |
13 | 53.8k | return T::decode(reader).map(Some); |
14 | 24.4k | } |
15 | 31.1k | } |
16 | | |
17 | 55.5k | Ok(None) |
18 | 109k | } <core::option::Option<der::asn1::any::allocating::Any> 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 | 21.9k | fn decode<R: Reader<'a>>(reader: &mut R) -> Result<Option<T>> { | 11 | 21.9k | if let Some(byte) = reader.peek_byte() { | 12 | 17.8k | if T::can_decode(Tag::try_from(byte)?) { | 13 | 17.7k | return T::decode(reader).map(Some); | 14 | 0 | } | 15 | 4.15k | } | 16 | | | 17 | 4.15k | Ok(None) | 18 | 21.9k | } |
<core::option::Option<der::asn1::any::allocating::Any> 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 | 35.1k | fn decode<R: Reader<'a>>(reader: &mut R) -> Result<Option<T>> { | 11 | 35.1k | if let Some(byte) = reader.peek_byte() { | 12 | 14.4k | if T::can_decode(Tag::try_from(byte)?) { | 13 | 14.4k | return T::decode(reader).map(Some); | 14 | 0 | } | 15 | 20.6k | } | 16 | | | 17 | 20.6k | Ok(None) | 18 | 35.1k | } |
<core::option::Option<der::asn1::any::allocating::Any> as der::decode::Decode>::decode::<der::reader::nested::NestedReader<der::reader::nested::NestedReader<der::reader::slice::SliceReader>>> Line | Count | Source | 10 | 15.1k | fn decode<R: Reader<'a>>(reader: &mut R) -> Result<Option<T>> { | 11 | 15.1k | if let Some(byte) = reader.peek_byte() { | 12 | 9.63k | if T::can_decode(Tag::try_from(byte)?) { | 13 | 9.60k | return T::decode(reader).map(Some); | 14 | 0 | } | 15 | 5.55k | } | 16 | | | 17 | 5.55k | Ok(None) | 18 | 15.1k | } |
Unexecuted instantiation: <core::option::Option<der::asn1::any::allocating::Any> as der::decode::Decode>::decode::<der::reader::nested::NestedReader<der::reader::slice::SliceReader>> <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 | 34.9k | fn decode<R: Reader<'a>>(reader: &mut R) -> Result<Option<T>> { | 11 | 34.9k | if let Some(byte) = reader.peek_byte() { | 12 | 34.9k | if T::can_decode(Tag::try_from(byte)?) { | 13 | 10.7k | return T::decode(reader).map(Some); | 14 | 24.1k | } | 15 | 44 | } | 16 | | | 17 | 24.1k | Ok(None) | 18 | 34.9k | } |
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>>>>> <core::option::Option<bool> as der::decode::Decode>::decode::<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 | 1.19k | if T::can_decode(Tag::try_from(byte)?) { | 13 | 904 | return T::decode(reader).map(Some); | 14 | 268 | } | 15 | 16 | } | 16 | | | 17 | 284 | Ok(None) | 18 | 1.20k | } |
<core::option::Option<u32> as der::decode::Decode>::decode::<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 | 412 | if T::can_decode(Tag::try_from(byte)?) { | 13 | 328 | return T::decode(reader).map(Some); | 14 | 70 | } | 15 | 642 | } | 16 | | | 17 | 712 | Ok(None) | 18 | 1.05k | } |
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 | 11.2k | fn encoded_len(&self) -> Result<Length> { |
41 | 11.2k | (&self).encoded_len() |
42 | 11.2k | } <core::option::Option<der::asn1::any::allocating::Any> as der::encode::Encode>::encoded_len Line | Count | Source | 40 | 9.01k | fn encoded_len(&self) -> Result<Length> { | 41 | 9.01k | (&self).encoded_len() | 42 | 9.01k | } |
<core::option::Option<bool> as der::encode::Encode>::encoded_len Line | Count | Source | 40 | 2.28k | fn encoded_len(&self) -> Result<Length> { | 41 | 2.28k | (&self).encoded_len() | 42 | 2.28k | } |
Unexecuted instantiation: <core::option::Option<u32> as der::encode::Encode>::encoded_len Unexecuted instantiation: <core::option::Option<_> as der::encode::Encode>::encoded_len |
43 | | |
44 | 3.03k | fn encode(&self, writer: &mut impl Writer) -> Result<()> { |
45 | 3.03k | (&self).encode(writer) |
46 | 3.03k | } <core::option::Option<der::asn1::any::allocating::Any> as der::encode::Encode>::encode::<der::writer::slice::SliceWriter> Line | Count | Source | 44 | 2.57k | fn encode(&self, writer: &mut impl Writer) -> Result<()> { | 45 | 2.57k | (&self).encode(writer) | 46 | 2.57k | } |
<core::option::Option<bool> as der::encode::Encode>::encode::<der::writer::slice::SliceWriter> Line | Count | Source | 44 | 456 | fn encode(&self, writer: &mut impl Writer) -> Result<()> { | 45 | 456 | (&self).encode(writer) | 46 | 456 | } |
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 | 11.2k | fn encoded_len(&self) -> Result<Length> { |
54 | 11.2k | match self { |
55 | 7.11k | Some(encodable) => encodable.encoded_len(), |
56 | 4.18k | None => Ok(0u8.into()), |
57 | | } |
58 | 11.2k | } <&core::option::Option<der::asn1::any::allocating::Any> as der::encode::Encode>::encoded_len Line | Count | Source | 53 | 9.01k | fn encoded_len(&self) -> Result<Length> { | 54 | 9.01k | match self { | 55 | 5.71k | Some(encodable) => encodable.encoded_len(), | 56 | 3.30k | None => Ok(0u8.into()), | 57 | | } | 58 | 9.01k | } |
<&core::option::Option<bool> as der::encode::Encode>::encoded_len Line | Count | Source | 53 | 2.28k | fn encoded_len(&self) -> Result<Length> { | 54 | 2.28k | match self { | 55 | 1.40k | Some(encodable) => encodable.encoded_len(), | 56 | 880 | None => Ok(0u8.into()), | 57 | | } | 58 | 2.28k | } |
Unexecuted instantiation: <&core::option::Option<u32> as der::encode::Encode>::encoded_len Unexecuted instantiation: <&core::option::Option<_> as der::encode::Encode>::encoded_len |
59 | | |
60 | 3.03k | fn encode(&self, encoder: &mut impl Writer) -> Result<()> { |
61 | 3.03k | match self { |
62 | 1.98k | Some(encodable) => encodable.encode(encoder), |
63 | 1.04k | None => Ok(()), |
64 | | } |
65 | 3.03k | } <&core::option::Option<der::asn1::any::allocating::Any> as der::encode::Encode>::encode::<der::writer::slice::SliceWriter> Line | Count | Source | 60 | 2.57k | fn encode(&self, encoder: &mut impl Writer) -> Result<()> { | 61 | 2.57k | match self { | 62 | 1.70k | Some(encodable) => encodable.encode(encoder), | 63 | 872 | None => Ok(()), | 64 | | } | 65 | 2.57k | } |
<&core::option::Option<bool> as der::encode::Encode>::encode::<der::writer::slice::SliceWriter> Line | Count | Source | 60 | 456 | fn encode(&self, encoder: &mut impl Writer) -> Result<()> { | 61 | 456 | match self { | 62 | 280 | Some(encodable) => encodable.encode(encoder), | 63 | 176 | None => Ok(()), | 64 | | } | 65 | 456 | } |
Unexecuted instantiation: <&core::option::Option<_> as der::encode::Encode>::encode::<_> |
66 | | } |