Skip to main content

lber_serde/structures/
sequence.rs

1use std::default;
2use structure;
3use universal;
4
5use super::{ASNTag, Tag};
6use common::TagClass;
7
8/// Sequence of values.
9#[derive(Clone, Debug, PartialEq)]
10pub struct Sequence {
11    pub id: u64,
12    pub class: TagClass,
13    pub inner: Vec<Tag>,
14}
15
16impl ASNTag for Sequence {
17    fn into_structure(self) -> structure::StructureTag {
18        structure::StructureTag {
19            id: self.id,
20            class: self.class,
21            payload: structure::PL::C(self.inner.into_iter().map(|x| x.into_structure()).collect()),
22        }
23    }
24}
25
26impl default::Default for Sequence {
27    fn default() -> Self {
28        Sequence {
29            id: universal::Types::Sequence as u64,
30            class: TagClass::Universal,
31            inner: Vec::new(),
32        }
33    }
34}
35
36/// Set of values; doesn't allow duplicates.
37#[derive(Clone, Debug, PartialEq)]
38pub struct Set {
39    pub id: u64,
40    pub class: TagClass,
41    pub inner: Vec<Tag>,
42}
43
44impl ASNTag for Set {
45    fn into_structure(self) -> structure::StructureTag {
46        structure::StructureTag {
47            id: self.id,
48            class: self.class,
49            payload: structure::PL::C(self.inner.into_iter().map(|x| x.into_structure()).collect()),
50        }
51    }
52}
53
54impl default::Default for Set {
55    fn default() -> Self {
56        Set {
57            id: universal::Types::Set as u64,
58            class: TagClass::Universal,
59            inner: Vec::new(),
60        }
61    }
62}
63
64#[derive(Clone, Debug, PartialEq)]
65pub struct SequenceOf<T> {
66    pub id: u64,
67    pub class: TagClass,
68    pub inner: Vec<T>,
69}
70
71impl<T: ASNTag + Sized> ASNTag for SequenceOf<T> {
72    fn into_structure(self) -> structure::StructureTag {
73        structure::StructureTag {
74            id: self.id,
75            class: self.class,
76            payload: structure::PL::C(self.inner.into_iter().map(|x| x.into_structure()).collect()),
77        }
78    }
79}
80
81impl<T: ASNTag + Sized> default::Default for SequenceOf<T> {
82    fn default() -> Self {
83        SequenceOf::<T> {
84            id: universal::Types::Sequence as u64,
85            class: TagClass::Universal,
86            inner: Vec::new(),
87        }
88    }
89}
90
91#[derive(Clone, Debug, PartialEq)]
92pub struct SetOf<T> {
93    pub id: u64,
94    pub class: TagClass,
95    pub inner: Vec<T>,
96}
97
98impl<T: ASNTag + Sized> ASNTag for SetOf<T> {
99    fn into_structure(self) -> structure::StructureTag {
100        structure::StructureTag {
101            id: self.id,
102            class: self.class,
103            payload: structure::PL::C(self.inner.into_iter().map(|x| x.into_structure()).collect()),
104        }
105    }
106}
107
108impl<T: ASNTag + Sized> default::Default for SetOf<T> {
109    fn default() -> Self {
110        SetOf {
111            id: universal::Types::Set as u64,
112            class: TagClass::Universal,
113            inner: Vec::new(),
114        }
115    }
116}