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