Coverage Report

Created: 2026-05-16 06:09

next uncovered line (L), next uncovered region (R), next uncovered branch (B)
/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
0
    fn decode<R: Reader<'a>>(reader: &mut R) -> Result<Option<T>> {
11
0
        if let Some(byte) = reader.peek_byte() {
12
0
            if T::can_decode(Tag::try_from(byte)?) {
13
0
                return T::decode(reader).map(Some);
14
0
            }
15
0
        }
16
17
0
        Ok(None)
18
0
    }
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
140k
    fn encoded_len(&self) -> Result<Length> {
41
140k
        (&self).encoded_len()
42
140k
    }
<core::option::Option<anise::structure::planetocentric::phaseangle::PhaseAngle<32>> as der::encode::Encode>::encoded_len
Line
Count
Source
40
84.5k
    fn encoded_len(&self) -> Result<Length> {
41
84.5k
        (&self).encoded_len()
42
84.5k
    }
Unexecuted instantiation: <core::option::Option<alloc::string::String> as der::encode::Encode>::encoded_len
Unexecuted instantiation: <core::option::Option<anise::structure::spacecraft::srp::SRPData> as der::encode::Encode>::encoded_len
Unexecuted instantiation: <core::option::Option<anise::structure::spacecraft::drag::DragData> as der::encode::Encode>::encoded_len
Unexecuted instantiation: <core::option::Option<anise::structure::spacecraft::mass::Mass> as der::encode::Encode>::encoded_len
Unexecuted instantiation: <core::option::Option<anise::structure::spacecraft::inertia::Inertia> as der::encode::Encode>::encoded_len
<core::option::Option<anise::structure::planetocentric::ellipsoid::Ellipsoid> as der::encode::Encode>::encoded_len
Line
Count
Source
40
28.1k
    fn encoded_len(&self) -> Result<Length> {
41
28.1k
        (&self).encoded_len()
42
28.1k
    }
<core::option::Option<f64> as der::encode::Encode>::encoded_len
Line
Count
Source
40
28.1k
    fn encoded_len(&self) -> Result<Length> {
41
28.1k
        (&self).encoded_len()
42
28.1k
    }
Unexecuted instantiation: <core::option::Option<_> as der::encode::Encode>::encoded_len
43
44
140k
    fn encode(&self, writer: &mut impl Writer) -> Result<()> {
45
140k
        (&self).encode(writer)
46
140k
    }
<core::option::Option<anise::structure::planetocentric::phaseangle::PhaseAngle<32>> as der::encode::Encode>::encode::<der::writer::slice::SliceWriter>
Line
Count
Source
44
84.5k
    fn encode(&self, writer: &mut impl Writer) -> Result<()> {
45
84.5k
        (&self).encode(writer)
46
84.5k
    }
Unexecuted instantiation: <core::option::Option<alloc::string::String> as der::encode::Encode>::encode::<der::writer::slice::SliceWriter>
Unexecuted instantiation: <core::option::Option<anise::structure::spacecraft::srp::SRPData> as der::encode::Encode>::encode::<der::writer::slice::SliceWriter>
Unexecuted instantiation: <core::option::Option<anise::structure::spacecraft::drag::DragData> as der::encode::Encode>::encode::<der::writer::slice::SliceWriter>
Unexecuted instantiation: <core::option::Option<anise::structure::spacecraft::mass::Mass> as der::encode::Encode>::encode::<der::writer::slice::SliceWriter>
Unexecuted instantiation: <core::option::Option<anise::structure::spacecraft::inertia::Inertia> as der::encode::Encode>::encode::<der::writer::slice::SliceWriter>
<core::option::Option<anise::structure::planetocentric::ellipsoid::Ellipsoid> as der::encode::Encode>::encode::<der::writer::slice::SliceWriter>
Line
Count
Source
44
28.1k
    fn encode(&self, writer: &mut impl Writer) -> Result<()> {
45
28.1k
        (&self).encode(writer)
46
28.1k
    }
<core::option::Option<f64> as der::encode::Encode>::encode::<der::writer::slice::SliceWriter>
Line
Count
Source
44
28.1k
    fn encode(&self, writer: &mut impl Writer) -> Result<()> {
45
28.1k
        (&self).encode(writer)
46
28.1k
    }
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
140k
    fn encoded_len(&self) -> Result<Length> {
54
140k
        match self {
55
15.0k
            Some(encodable) => encodable.encoded_len(),
56
125k
            None => Ok(0u8.into()),
57
        }
58
140k
    }
<&core::option::Option<anise::structure::planetocentric::phaseangle::PhaseAngle<32>> as der::encode::Encode>::encoded_len
Line
Count
Source
53
84.5k
    fn encoded_len(&self) -> Result<Length> {
54
84.5k
        match self {
55
12.9k
            Some(encodable) => encodable.encoded_len(),
56
71.6k
            None => Ok(0u8.into()),
57
        }
58
84.5k
    }
Unexecuted instantiation: <&core::option::Option<alloc::string::String> as der::encode::Encode>::encoded_len
Unexecuted instantiation: <&core::option::Option<anise::structure::spacecraft::srp::SRPData> as der::encode::Encode>::encoded_len
Unexecuted instantiation: <&core::option::Option<anise::structure::spacecraft::drag::DragData> as der::encode::Encode>::encoded_len
Unexecuted instantiation: <&core::option::Option<anise::structure::spacecraft::mass::Mass> as der::encode::Encode>::encoded_len
Unexecuted instantiation: <&core::option::Option<anise::structure::spacecraft::inertia::Inertia> as der::encode::Encode>::encoded_len
<&core::option::Option<anise::structure::planetocentric::ellipsoid::Ellipsoid> as der::encode::Encode>::encoded_len
Line
Count
Source
53
28.1k
    fn encoded_len(&self) -> Result<Length> {
54
28.1k
        match self {
55
894
            Some(encodable) => encodable.encoded_len(),
56
27.2k
            None => Ok(0u8.into()),
57
        }
58
28.1k
    }
<&core::option::Option<f64> as der::encode::Encode>::encoded_len
Line
Count
Source
53
28.1k
    fn encoded_len(&self) -> Result<Length> {
54
28.1k
        match self {
55
1.23k
            Some(encodable) => encodable.encoded_len(),
56
26.9k
            None => Ok(0u8.into()),
57
        }
58
28.1k
    }
Unexecuted instantiation: <&core::option::Option<_> as der::encode::Encode>::encoded_len
59
60
140k
    fn encode(&self, encoder: &mut impl Writer) -> Result<()> {
61
140k
        match self {
62
15.0k
            Some(encodable) => encodable.encode(encoder),
63
125k
            None => Ok(()),
64
        }
65
140k
    }
<&core::option::Option<anise::structure::planetocentric::phaseangle::PhaseAngle<32>> as der::encode::Encode>::encode::<der::writer::slice::SliceWriter>
Line
Count
Source
60
84.5k
    fn encode(&self, encoder: &mut impl Writer) -> Result<()> {
61
84.5k
        match self {
62
12.9k
            Some(encodable) => encodable.encode(encoder),
63
71.6k
            None => Ok(()),
64
        }
65
84.5k
    }
Unexecuted instantiation: <&core::option::Option<alloc::string::String> as der::encode::Encode>::encode::<der::writer::slice::SliceWriter>
Unexecuted instantiation: <&core::option::Option<anise::structure::spacecraft::srp::SRPData> as der::encode::Encode>::encode::<der::writer::slice::SliceWriter>
Unexecuted instantiation: <&core::option::Option<anise::structure::spacecraft::drag::DragData> as der::encode::Encode>::encode::<der::writer::slice::SliceWriter>
Unexecuted instantiation: <&core::option::Option<anise::structure::spacecraft::mass::Mass> as der::encode::Encode>::encode::<der::writer::slice::SliceWriter>
Unexecuted instantiation: <&core::option::Option<anise::structure::spacecraft::inertia::Inertia> as der::encode::Encode>::encode::<der::writer::slice::SliceWriter>
<&core::option::Option<anise::structure::planetocentric::ellipsoid::Ellipsoid> as der::encode::Encode>::encode::<der::writer::slice::SliceWriter>
Line
Count
Source
60
28.1k
    fn encode(&self, encoder: &mut impl Writer) -> Result<()> {
61
28.1k
        match self {
62
894
            Some(encodable) => encodable.encode(encoder),
63
27.2k
            None => Ok(()),
64
        }
65
28.1k
    }
<&core::option::Option<f64> as der::encode::Encode>::encode::<der::writer::slice::SliceWriter>
Line
Count
Source
60
28.1k
    fn encode(&self, encoder: &mut impl Writer) -> Result<()> {
61
28.1k
        match self {
62
1.23k
            Some(encodable) => encodable.encode(encoder),
63
26.9k
            None => Ok(()),
64
        }
65
28.1k
    }
Unexecuted instantiation: <&core::option::Option<_> as der::encode::Encode>::encode::<_>
66
}