asn1_rs/asn1_types/
null.rs1use crate::*;
2use core::convert::TryFrom;
3
4#[derive(Debug, PartialEq, Eq)]
6pub struct Null {}
7
8impl Default for Null {
9 fn default() -> Self {
10 Self::new()
11 }
12}
13
14impl Null {
15 pub const fn new() -> Self {
16 Null {}
17 }
18}
19
20impl<'a> TryFrom<Any<'a>> for Null {
21 type Error = Error;
22
23 fn try_from(any: Any<'a>) -> Result<Null> {
24 TryFrom::try_from(&any)
25 }
26}
27
28impl<'a, 'b> TryFrom<&'b Any<'a>> for Null {
29 type Error = Error;
30
31 fn try_from(any: &'b Any<'a>) -> Result<Null> {
32 any.tag().assert_eq(Self::TAG)?;
33 if !any.header.length.is_null() {
34 return Err(Error::InvalidLength);
35 }
36 Ok(Null {})
37 }
38}
39
40impl CheckDerConstraints for Null {
41 fn check_constraints(_any: &Any) -> Result<()> {
42 Ok(())
43 }
44}
45
46impl DerAutoDerive for Null {}
47
48impl Tagged for Null {
49 const TAG: Tag = Tag::Null;
50}
51
52#[cfg(feature = "std")]
53impl ToDer for Null {
54 fn to_der_len(&self) -> Result<usize> {
55 Ok(2)
56 }
57
58 fn write_der_header(&self, writer: &mut dyn std::io::Write) -> SerializeResult<usize> {
59 writer.write(&[0x05, 0x00]).map_err(Into::into)
60 }
61
62 fn write_der_content(&self, _writer: &mut dyn std::io::Write) -> SerializeResult<usize> {
63 Ok(0)
64 }
65}
66
67impl<'a> TryFrom<Any<'a>> for () {
68 type Error = Error;
69
70 fn try_from(any: Any<'a>) -> Result<()> {
71 any.tag().assert_eq(Self::TAG)?;
72 any.header.assert_primitive()?;
73 if !any.header.length.is_null() {
74 return Err(Error::InvalidLength);
75 }
76 Ok(())
77 }
78}
79
80impl CheckDerConstraints for () {
81 fn check_constraints(_any: &Any) -> Result<()> {
82 Ok(())
83 }
84}
85
86impl DerAutoDerive for () {}
87
88impl Tagged for () {
89 const TAG: Tag = Tag::Null;
90}
91
92#[cfg(feature = "std")]
93impl ToDer for () {
94 fn to_der_len(&self) -> Result<usize> {
95 Ok(2)
96 }
97
98 fn write_der_header(&self, writer: &mut dyn std::io::Write) -> SerializeResult<usize> {
99 writer.write(&[0x05, 0x00]).map_err(Into::into)
100 }
101
102 fn write_der_content(&self, _writer: &mut dyn std::io::Write) -> SerializeResult<usize> {
103 Ok(0)
104 }
105}