1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
use structure;
pub mod boolean;
pub mod explicit;
pub mod integer;
pub mod null;
pub mod octetstring;
pub mod sequence;
pub use self::boolean::Boolean;
pub use self::explicit::ExplicitTag;
pub use self::integer::{Enumerated, Integer};
pub use self::null::Null;
pub use self::octetstring::OctetString;
pub use self::sequence::{Sequence, SequenceOf, Set, SetOf};
pub trait ASNTag {
fn into_structure(self) -> structure::StructureTag;
}
#[derive(Clone, Debug, PartialEq)]
pub enum Tag {
Integer(integer::Integer),
Enumerated(integer::Enumerated),
Sequence(sequence::Sequence),
Set(sequence::Set),
OctetString(octetstring::OctetString),
Boolean(boolean::Boolean),
Null(null::Null),
ExplicitTag(explicit::ExplicitTag),
StructureTag(structure::StructureTag),
}
impl ASNTag for Tag {
fn into_structure(self) -> structure::StructureTag {
match self {
Tag::Integer(i) => i.into_structure(),
Tag::Enumerated(i) => i.into_structure(),
Tag::Sequence(i) => i.into_structure(),
Tag::Set(i) => i.into_structure(),
Tag::OctetString(i) => i.into_structure(),
Tag::Boolean(i) => i.into_structure(),
Tag::Null(i) => i.into_structure(),
Tag::ExplicitTag(i) => i.into_structure(),
Tag::StructureTag(s) => s,
}
}
}