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