Coverage Report

Created: 2024-11-30 06:06

/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
}