dnp3/app/gen/
prefixed.rs

1//  _   _         ______    _ _ _   _             _ _ _
2// | \ | |       |  ____|  | (_) | (_)           | | | |
3// |  \| | ___   | |__   __| |_| |_ _ _ __   __ _| | | |
4// | . ` |/ _ \  |  __| / _` | | __| | '_ \ / _` | | | |
5// | |\  | (_) | | |___| (_| | | |_| | | | | (_| |_|_|_|
6// |_| \_|\___/  |______\__,_|_|\__|_|_| |_|\__, (_|_|_)
7//                                           __/ |
8//                                          |___/
9//
10// This file is auto-generated. Do not edit manually
11//
12
13use crate::app::variations::*;
14use crate::app::parse::count::CountSequence;
15use crate::app::parse::parser::*;
16use crate::app::parse::traits::{FixedSize, Index};
17use crate::app::parse::prefix::Prefix;
18use crate::app::parse::bytes::*;
19use crate::app::measurement::Time;
20use crate::master::{ReadHandler, HeaderInfo};
21use crate::app::ObjectParseError;
22
23use scursor::ReadCursor;
24
25#[derive(Debug)]
26pub(crate) enum PrefixedVariation<'a, I> where I : FixedSize + Index + std::fmt::Display {
27    /// Device Attributes - Specific Attribute
28    Group0(crate::app::attr::Attribute<'a>),
29    /// Binary Input Event - Without Time
30    Group2Var1(CountSequence<'a, Prefix<I, Group2Var1>>),
31    /// Binary Input Event - With Absolute Time
32    Group2Var2(CountSequence<'a, Prefix<I, Group2Var2>>),
33    /// Binary Input Event - With Relative Time
34    Group2Var3(CountSequence<'a, Prefix<I, Group2Var3>>),
35    /// Double-bit Binary Input Event - Without Time
36    Group4Var1(CountSequence<'a, Prefix<I, Group4Var1>>),
37    /// Double-bit Binary Input Event - With Absolute Time
38    Group4Var2(CountSequence<'a, Prefix<I, Group4Var2>>),
39    /// Double-bit Binary Input Event - With Relative Time
40    Group4Var3(CountSequence<'a, Prefix<I, Group4Var3>>),
41    /// Binary Output Event - Output Status Without Time
42    Group11Var1(CountSequence<'a, Prefix<I, Group11Var1>>),
43    /// Binary Output Event - Output Status With Time
44    Group11Var2(CountSequence<'a, Prefix<I, Group11Var2>>),
45    /// Binary Command - Control Relay Output Block
46    Group12Var1(CountSequence<'a, Prefix<I, Group12Var1>>),
47    /// Binary Output Command Event - Without Time
48    Group13Var1(CountSequence<'a, Prefix<I, Group13Var1>>),
49    /// Binary Output Command Event - With Time
50    Group13Var2(CountSequence<'a, Prefix<I, Group13Var2>>),
51    /// Counter Event - 32-bit With Flag
52    Group22Var1(CountSequence<'a, Prefix<I, Group22Var1>>),
53    /// Counter Event - 16-bit With Flag
54    Group22Var2(CountSequence<'a, Prefix<I, Group22Var2>>),
55    /// Counter Event - 32-bit With Flag and Time
56    Group22Var5(CountSequence<'a, Prefix<I, Group22Var5>>),
57    /// Counter Event - 16-bit With Flag and Time
58    Group22Var6(CountSequence<'a, Prefix<I, Group22Var6>>),
59    /// Frozen Counter Event - 32-bit With Flag
60    Group23Var1(CountSequence<'a, Prefix<I, Group23Var1>>),
61    /// Frozen Counter Event - 16-bit With Flag
62    Group23Var2(CountSequence<'a, Prefix<I, Group23Var2>>),
63    /// Frozen Counter Event - 32-bit With Flag and Time
64    Group23Var5(CountSequence<'a, Prefix<I, Group23Var5>>),
65    /// Frozen Counter Event - 16-bit With Flag and Time
66    Group23Var6(CountSequence<'a, Prefix<I, Group23Var6>>),
67    /// Analog Input Event - 32-bit With Flag
68    Group32Var1(CountSequence<'a, Prefix<I, Group32Var1>>),
69    /// Analog Input Event - 16-bit With Flag
70    Group32Var2(CountSequence<'a, Prefix<I, Group32Var2>>),
71    /// Analog Input Event - 32-bit With Flag and Time
72    Group32Var3(CountSequence<'a, Prefix<I, Group32Var3>>),
73    /// Analog Input Event - 16-bit With Flag and Time
74    Group32Var4(CountSequence<'a, Prefix<I, Group32Var4>>),
75    /// Analog Input Event - Single-precision With Flag
76    Group32Var5(CountSequence<'a, Prefix<I, Group32Var5>>),
77    /// Analog Input Event - Double-precision With Flag
78    Group32Var6(CountSequence<'a, Prefix<I, Group32Var6>>),
79    /// Analog Input Event - Single-precision With Flag and Time
80    Group32Var7(CountSequence<'a, Prefix<I, Group32Var7>>),
81    /// Analog Input Event - Double-precision With Flag and Time
82    Group32Var8(CountSequence<'a, Prefix<I, Group32Var8>>),
83    /// Frozen Analog Input Event - 32-bit With Flag
84    Group33Var1(CountSequence<'a, Prefix<I, Group33Var1>>),
85    /// Frozen Analog Input Event - 16-bit With Flag
86    Group33Var2(CountSequence<'a, Prefix<I, Group33Var2>>),
87    /// Frozen Analog Input Event - 32-bit with Flag and Time-of-Freeze
88    Group33Var3(CountSequence<'a, Prefix<I, Group33Var3>>),
89    /// Frozen Analog Input Event - 16-bit with Flag and Time-of-Freeze
90    Group33Var4(CountSequence<'a, Prefix<I, Group33Var4>>),
91    /// Frozen Analog Input Event - Single-precision With Flag
92    Group33Var5(CountSequence<'a, Prefix<I, Group33Var5>>),
93    /// Frozen Analog Input Event - Double-precision With Flag
94    Group33Var6(CountSequence<'a, Prefix<I, Group33Var6>>),
95    /// Frozen Analog Input Event - Single-precision With Flag and Time
96    Group33Var7(CountSequence<'a, Prefix<I, Group33Var7>>),
97    /// Frozen Analog Input Event - Double-precision With Flag and Time
98    Group33Var8(CountSequence<'a, Prefix<I, Group33Var8>>),
99    /// Analog Input Reporting Deadband - 16-bit
100    Group34Var1(CountSequence<'a, Prefix<I, Group34Var1>>),
101    /// Analog Input Reporting Deadband - 32-bit
102    Group34Var2(CountSequence<'a, Prefix<I, Group34Var2>>),
103    /// Analog Input Reporting Deadband - Single-precision
104    Group34Var3(CountSequence<'a, Prefix<I, Group34Var3>>),
105    /// Analog Output - 32-bit With Flag
106    Group41Var1(CountSequence<'a, Prefix<I, Group41Var1>>),
107    /// Analog Output - 16-bit With Flag
108    Group41Var2(CountSequence<'a, Prefix<I, Group41Var2>>),
109    /// Analog Output - Single-precision
110    Group41Var3(CountSequence<'a, Prefix<I, Group41Var3>>),
111    /// Analog Output - Double-precision
112    Group41Var4(CountSequence<'a, Prefix<I, Group41Var4>>),
113    /// Analog Output Event - 32-bit With Flag
114    Group42Var1(CountSequence<'a, Prefix<I, Group42Var1>>),
115    /// Analog Output Event - 16-bit With Flag
116    Group42Var2(CountSequence<'a, Prefix<I, Group42Var2>>),
117    /// Analog Output Event - 32-bit With Flag and Time
118    Group42Var3(CountSequence<'a, Prefix<I, Group42Var3>>),
119    /// Analog Output Event - 16-bit With Flag and Time
120    Group42Var4(CountSequence<'a, Prefix<I, Group42Var4>>),
121    /// Analog Output Event - Single-precision With Flag
122    Group42Var5(CountSequence<'a, Prefix<I, Group42Var5>>),
123    /// Analog Output Event - Double-precision With Flag
124    Group42Var6(CountSequence<'a, Prefix<I, Group42Var6>>),
125    /// Analog Output Event - Single-precision With Flag and Time
126    Group42Var7(CountSequence<'a, Prefix<I, Group42Var7>>),
127    /// Analog Output Event - Double-precision With Flag and Time
128    Group42Var8(CountSequence<'a, Prefix<I, Group42Var8>>),
129    /// Analog Output Command Event - 32-bit
130    Group43Var1(CountSequence<'a, Prefix<I, Group43Var1>>),
131    /// Analog Output Command Event - 16-bit
132    Group43Var2(CountSequence<'a, Prefix<I, Group43Var2>>),
133    /// Analog Output Command Event - 32-bit With Time
134    Group43Var3(CountSequence<'a, Prefix<I, Group43Var3>>),
135    /// Analog Output Command Event - 16-bit With Time
136    Group43Var4(CountSequence<'a, Prefix<I, Group43Var4>>),
137    /// Analog Output Command Event - Single-precision
138    Group43Var5(CountSequence<'a, Prefix<I, Group43Var5>>),
139    /// Analog Output Command Event - Double-precision
140    Group43Var6(CountSequence<'a, Prefix<I, Group43Var6>>),
141    /// Analog Output Command Event - Single-precision With Time
142    Group43Var7(CountSequence<'a, Prefix<I, Group43Var7>>),
143    /// Analog Output Command Event - Double-precision With Time
144    Group43Var8(CountSequence<'a, Prefix<I, Group43Var8>>),
145    /// Octet String Event - Sized by variation
146    Group111VarX(u8, PrefixedBytesSequence<'a, I>),
147}
148
149impl<'a, I> PrefixedVariation<'a, I> where I : FixedSize + Index + std::fmt::Display {
150    pub(crate) fn parse(v: Variation, count: u16, cursor: &mut ReadCursor<'a>) -> Result<PrefixedVariation<'a, I>, ObjectParseError> {
151        match v {
152            Variation::Group0(var) => Ok(PrefixedVariation::Group0(crate::app::attr::Attribute::parse_prefixed::<I>(var, count, cursor)?)),
153            Variation::Group2Var1 => Ok(PrefixedVariation::Group2Var1(CountSequence::parse(count, cursor)?)),
154            Variation::Group2Var2 => Ok(PrefixedVariation::Group2Var2(CountSequence::parse(count, cursor)?)),
155            Variation::Group2Var3 => Ok(PrefixedVariation::Group2Var3(CountSequence::parse(count, cursor)?)),
156            Variation::Group4Var1 => Ok(PrefixedVariation::Group4Var1(CountSequence::parse(count, cursor)?)),
157            Variation::Group4Var2 => Ok(PrefixedVariation::Group4Var2(CountSequence::parse(count, cursor)?)),
158            Variation::Group4Var3 => Ok(PrefixedVariation::Group4Var3(CountSequence::parse(count, cursor)?)),
159            Variation::Group11Var1 => Ok(PrefixedVariation::Group11Var1(CountSequence::parse(count, cursor)?)),
160            Variation::Group11Var2 => Ok(PrefixedVariation::Group11Var2(CountSequence::parse(count, cursor)?)),
161            Variation::Group12Var1 => Ok(PrefixedVariation::Group12Var1(CountSequence::parse(count, cursor)?)),
162            Variation::Group13Var1 => Ok(PrefixedVariation::Group13Var1(CountSequence::parse(count, cursor)?)),
163            Variation::Group13Var2 => Ok(PrefixedVariation::Group13Var2(CountSequence::parse(count, cursor)?)),
164            Variation::Group22Var1 => Ok(PrefixedVariation::Group22Var1(CountSequence::parse(count, cursor)?)),
165            Variation::Group22Var2 => Ok(PrefixedVariation::Group22Var2(CountSequence::parse(count, cursor)?)),
166            Variation::Group22Var5 => Ok(PrefixedVariation::Group22Var5(CountSequence::parse(count, cursor)?)),
167            Variation::Group22Var6 => Ok(PrefixedVariation::Group22Var6(CountSequence::parse(count, cursor)?)),
168            Variation::Group23Var1 => Ok(PrefixedVariation::Group23Var1(CountSequence::parse(count, cursor)?)),
169            Variation::Group23Var2 => Ok(PrefixedVariation::Group23Var2(CountSequence::parse(count, cursor)?)),
170            Variation::Group23Var5 => Ok(PrefixedVariation::Group23Var5(CountSequence::parse(count, cursor)?)),
171            Variation::Group23Var6 => Ok(PrefixedVariation::Group23Var6(CountSequence::parse(count, cursor)?)),
172            Variation::Group32Var1 => Ok(PrefixedVariation::Group32Var1(CountSequence::parse(count, cursor)?)),
173            Variation::Group32Var2 => Ok(PrefixedVariation::Group32Var2(CountSequence::parse(count, cursor)?)),
174            Variation::Group32Var3 => Ok(PrefixedVariation::Group32Var3(CountSequence::parse(count, cursor)?)),
175            Variation::Group32Var4 => Ok(PrefixedVariation::Group32Var4(CountSequence::parse(count, cursor)?)),
176            Variation::Group32Var5 => Ok(PrefixedVariation::Group32Var5(CountSequence::parse(count, cursor)?)),
177            Variation::Group32Var6 => Ok(PrefixedVariation::Group32Var6(CountSequence::parse(count, cursor)?)),
178            Variation::Group32Var7 => Ok(PrefixedVariation::Group32Var7(CountSequence::parse(count, cursor)?)),
179            Variation::Group32Var8 => Ok(PrefixedVariation::Group32Var8(CountSequence::parse(count, cursor)?)),
180            Variation::Group33Var1 => Ok(PrefixedVariation::Group33Var1(CountSequence::parse(count, cursor)?)),
181            Variation::Group33Var2 => Ok(PrefixedVariation::Group33Var2(CountSequence::parse(count, cursor)?)),
182            Variation::Group33Var3 => Ok(PrefixedVariation::Group33Var3(CountSequence::parse(count, cursor)?)),
183            Variation::Group33Var4 => Ok(PrefixedVariation::Group33Var4(CountSequence::parse(count, cursor)?)),
184            Variation::Group33Var5 => Ok(PrefixedVariation::Group33Var5(CountSequence::parse(count, cursor)?)),
185            Variation::Group33Var6 => Ok(PrefixedVariation::Group33Var6(CountSequence::parse(count, cursor)?)),
186            Variation::Group33Var7 => Ok(PrefixedVariation::Group33Var7(CountSequence::parse(count, cursor)?)),
187            Variation::Group33Var8 => Ok(PrefixedVariation::Group33Var8(CountSequence::parse(count, cursor)?)),
188            Variation::Group34Var1 => Ok(PrefixedVariation::Group34Var1(CountSequence::parse(count, cursor)?)),
189            Variation::Group34Var2 => Ok(PrefixedVariation::Group34Var2(CountSequence::parse(count, cursor)?)),
190            Variation::Group34Var3 => Ok(PrefixedVariation::Group34Var3(CountSequence::parse(count, cursor)?)),
191            Variation::Group41Var1 => Ok(PrefixedVariation::Group41Var1(CountSequence::parse(count, cursor)?)),
192            Variation::Group41Var2 => Ok(PrefixedVariation::Group41Var2(CountSequence::parse(count, cursor)?)),
193            Variation::Group41Var3 => Ok(PrefixedVariation::Group41Var3(CountSequence::parse(count, cursor)?)),
194            Variation::Group41Var4 => Ok(PrefixedVariation::Group41Var4(CountSequence::parse(count, cursor)?)),
195            Variation::Group42Var1 => Ok(PrefixedVariation::Group42Var1(CountSequence::parse(count, cursor)?)),
196            Variation::Group42Var2 => Ok(PrefixedVariation::Group42Var2(CountSequence::parse(count, cursor)?)),
197            Variation::Group42Var3 => Ok(PrefixedVariation::Group42Var3(CountSequence::parse(count, cursor)?)),
198            Variation::Group42Var4 => Ok(PrefixedVariation::Group42Var4(CountSequence::parse(count, cursor)?)),
199            Variation::Group42Var5 => Ok(PrefixedVariation::Group42Var5(CountSequence::parse(count, cursor)?)),
200            Variation::Group42Var6 => Ok(PrefixedVariation::Group42Var6(CountSequence::parse(count, cursor)?)),
201            Variation::Group42Var7 => Ok(PrefixedVariation::Group42Var7(CountSequence::parse(count, cursor)?)),
202            Variation::Group42Var8 => Ok(PrefixedVariation::Group42Var8(CountSequence::parse(count, cursor)?)),
203            Variation::Group43Var1 => Ok(PrefixedVariation::Group43Var1(CountSequence::parse(count, cursor)?)),
204            Variation::Group43Var2 => Ok(PrefixedVariation::Group43Var2(CountSequence::parse(count, cursor)?)),
205            Variation::Group43Var3 => Ok(PrefixedVariation::Group43Var3(CountSequence::parse(count, cursor)?)),
206            Variation::Group43Var4 => Ok(PrefixedVariation::Group43Var4(CountSequence::parse(count, cursor)?)),
207            Variation::Group43Var5 => Ok(PrefixedVariation::Group43Var5(CountSequence::parse(count, cursor)?)),
208            Variation::Group43Var6 => Ok(PrefixedVariation::Group43Var6(CountSequence::parse(count, cursor)?)),
209            Variation::Group43Var7 => Ok(PrefixedVariation::Group43Var7(CountSequence::parse(count, cursor)?)),
210            Variation::Group43Var8 => Ok(PrefixedVariation::Group43Var8(CountSequence::parse(count, cursor)?)),
211            Variation::Group111(0) => Err(ObjectParseError::ZeroLengthOctetData),
212            Variation::Group111(x) => Ok(PrefixedVariation::Group111VarX(x, PrefixedBytesSequence::parse(x, count, cursor)?)),
213            _ => Err(ObjectParseError::InvalidQualifierForVariation(v, I::COUNT_AND_PREFIX_QUALIFIER)),
214        }
215    }
216    
217    pub(crate) fn format_objects(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
218        match self {
219            PrefixedVariation::Group0(attr) => attr.format(f),
220            PrefixedVariation::Group2Var1(seq) => format_prefixed_items(f, seq.iter()),
221            PrefixedVariation::Group2Var2(seq) => format_prefixed_items(f, seq.iter()),
222            PrefixedVariation::Group2Var3(seq) => format_prefixed_items(f, seq.iter()),
223            PrefixedVariation::Group4Var1(seq) => format_prefixed_items(f, seq.iter()),
224            PrefixedVariation::Group4Var2(seq) => format_prefixed_items(f, seq.iter()),
225            PrefixedVariation::Group4Var3(seq) => format_prefixed_items(f, seq.iter()),
226            PrefixedVariation::Group11Var1(seq) => format_prefixed_items(f, seq.iter()),
227            PrefixedVariation::Group11Var2(seq) => format_prefixed_items(f, seq.iter()),
228            PrefixedVariation::Group12Var1(seq) => format_prefixed_items(f, seq.iter()),
229            PrefixedVariation::Group13Var1(seq) => format_prefixed_items(f, seq.iter()),
230            PrefixedVariation::Group13Var2(seq) => format_prefixed_items(f, seq.iter()),
231            PrefixedVariation::Group22Var1(seq) => format_prefixed_items(f, seq.iter()),
232            PrefixedVariation::Group22Var2(seq) => format_prefixed_items(f, seq.iter()),
233            PrefixedVariation::Group22Var5(seq) => format_prefixed_items(f, seq.iter()),
234            PrefixedVariation::Group22Var6(seq) => format_prefixed_items(f, seq.iter()),
235            PrefixedVariation::Group23Var1(seq) => format_prefixed_items(f, seq.iter()),
236            PrefixedVariation::Group23Var2(seq) => format_prefixed_items(f, seq.iter()),
237            PrefixedVariation::Group23Var5(seq) => format_prefixed_items(f, seq.iter()),
238            PrefixedVariation::Group23Var6(seq) => format_prefixed_items(f, seq.iter()),
239            PrefixedVariation::Group32Var1(seq) => format_prefixed_items(f, seq.iter()),
240            PrefixedVariation::Group32Var2(seq) => format_prefixed_items(f, seq.iter()),
241            PrefixedVariation::Group32Var3(seq) => format_prefixed_items(f, seq.iter()),
242            PrefixedVariation::Group32Var4(seq) => format_prefixed_items(f, seq.iter()),
243            PrefixedVariation::Group32Var5(seq) => format_prefixed_items(f, seq.iter()),
244            PrefixedVariation::Group32Var6(seq) => format_prefixed_items(f, seq.iter()),
245            PrefixedVariation::Group32Var7(seq) => format_prefixed_items(f, seq.iter()),
246            PrefixedVariation::Group32Var8(seq) => format_prefixed_items(f, seq.iter()),
247            PrefixedVariation::Group33Var1(seq) => format_prefixed_items(f, seq.iter()),
248            PrefixedVariation::Group33Var2(seq) => format_prefixed_items(f, seq.iter()),
249            PrefixedVariation::Group33Var3(seq) => format_prefixed_items(f, seq.iter()),
250            PrefixedVariation::Group33Var4(seq) => format_prefixed_items(f, seq.iter()),
251            PrefixedVariation::Group33Var5(seq) => format_prefixed_items(f, seq.iter()),
252            PrefixedVariation::Group33Var6(seq) => format_prefixed_items(f, seq.iter()),
253            PrefixedVariation::Group33Var7(seq) => format_prefixed_items(f, seq.iter()),
254            PrefixedVariation::Group33Var8(seq) => format_prefixed_items(f, seq.iter()),
255            PrefixedVariation::Group34Var1(seq) => format_prefixed_items(f, seq.iter()),
256            PrefixedVariation::Group34Var2(seq) => format_prefixed_items(f, seq.iter()),
257            PrefixedVariation::Group34Var3(seq) => format_prefixed_items(f, seq.iter()),
258            PrefixedVariation::Group41Var1(seq) => format_prefixed_items(f, seq.iter()),
259            PrefixedVariation::Group41Var2(seq) => format_prefixed_items(f, seq.iter()),
260            PrefixedVariation::Group41Var3(seq) => format_prefixed_items(f, seq.iter()),
261            PrefixedVariation::Group41Var4(seq) => format_prefixed_items(f, seq.iter()),
262            PrefixedVariation::Group42Var1(seq) => format_prefixed_items(f, seq.iter()),
263            PrefixedVariation::Group42Var2(seq) => format_prefixed_items(f, seq.iter()),
264            PrefixedVariation::Group42Var3(seq) => format_prefixed_items(f, seq.iter()),
265            PrefixedVariation::Group42Var4(seq) => format_prefixed_items(f, seq.iter()),
266            PrefixedVariation::Group42Var5(seq) => format_prefixed_items(f, seq.iter()),
267            PrefixedVariation::Group42Var6(seq) => format_prefixed_items(f, seq.iter()),
268            PrefixedVariation::Group42Var7(seq) => format_prefixed_items(f, seq.iter()),
269            PrefixedVariation::Group42Var8(seq) => format_prefixed_items(f, seq.iter()),
270            PrefixedVariation::Group43Var1(seq) => format_prefixed_items(f, seq.iter()),
271            PrefixedVariation::Group43Var2(seq) => format_prefixed_items(f, seq.iter()),
272            PrefixedVariation::Group43Var3(seq) => format_prefixed_items(f, seq.iter()),
273            PrefixedVariation::Group43Var4(seq) => format_prefixed_items(f, seq.iter()),
274            PrefixedVariation::Group43Var5(seq) => format_prefixed_items(f, seq.iter()),
275            PrefixedVariation::Group43Var6(seq) => format_prefixed_items(f, seq.iter()),
276            PrefixedVariation::Group43Var7(seq) => format_prefixed_items(f, seq.iter()),
277            PrefixedVariation::Group43Var8(seq) => format_prefixed_items(f, seq.iter()),
278            PrefixedVariation::Group111VarX(_, seq) => format_indexed_items(f, seq.iter().map(|(x, i)| (Bytes::new(x), i))),
279        }
280    }
281    
282    pub(crate) fn extract_measurements_to(&self, cto: Option<Time>, handler: &mut dyn ReadHandler) -> bool {
283        match self {
284            PrefixedVariation::Group0(attr) => {
285                let info = self.get_header_info();
286                crate::master::handle_attribute(info.variation, info.qualifier, &Some(*attr), handler);
287                true
288            }
289            PrefixedVariation::Group2Var1(seq) => {
290                handler.handle_binary_input(
291                    self.get_header_info(),
292                    &mut seq.iter().map(|x| (x.value.into(), x.index.widen_to_u16()))
293                );
294                true
295            }
296            PrefixedVariation::Group2Var2(seq) => {
297                handler.handle_binary_input(
298                    self.get_header_info(),
299                    &mut seq.iter().map(|x| (x.value.into(), x.index.widen_to_u16()))
300                );
301                true
302            }
303            PrefixedVariation::Group2Var3(seq) => {
304                handler.handle_binary_input(
305                    self.get_header_info(),
306                    &mut seq.iter().map( |x| (x.value.to_measurement(cto), x.index.widen_to_u16()))
307                );
308                true
309            }
310            PrefixedVariation::Group4Var1(seq) => {
311                handler.handle_double_bit_binary_input(
312                    self.get_header_info(),
313                    &mut seq.iter().map(|x| (x.value.into(), x.index.widen_to_u16()))
314                );
315                true
316            }
317            PrefixedVariation::Group4Var2(seq) => {
318                handler.handle_double_bit_binary_input(
319                    self.get_header_info(),
320                    &mut seq.iter().map(|x| (x.value.into(), x.index.widen_to_u16()))
321                );
322                true
323            }
324            PrefixedVariation::Group4Var3(seq) => {
325                handler.handle_double_bit_binary_input(
326                    self.get_header_info(),
327                    &mut seq.iter().map( |x| (x.value.to_measurement(cto), x.index.widen_to_u16()))
328                );
329                true
330            }
331            PrefixedVariation::Group11Var1(seq) => {
332                handler.handle_binary_output_status(
333                    self.get_header_info(),
334                    &mut seq.iter().map(|x| (x.value.into(), x.index.widen_to_u16()))
335                );
336                true
337            }
338            PrefixedVariation::Group11Var2(seq) => {
339                handler.handle_binary_output_status(
340                    self.get_header_info(),
341                    &mut seq.iter().map(|x| (x.value.into(), x.index.widen_to_u16()))
342                );
343                true
344            }
345            PrefixedVariation::Group12Var1(_) => {
346                false // command
347            }
348            PrefixedVariation::Group13Var1(seq) => {
349                handler.handle_binary_output_command_event(
350                    self.get_header_info(),
351                    &mut seq.iter().map(|x| (x.value.into(), x.index.widen_to_u16()))
352                );
353                true
354            }
355            PrefixedVariation::Group13Var2(seq) => {
356                handler.handle_binary_output_command_event(
357                    self.get_header_info(),
358                    &mut seq.iter().map(|x| (x.value.into(), x.index.widen_to_u16()))
359                );
360                true
361            }
362            PrefixedVariation::Group22Var1(seq) => {
363                handler.handle_counter(
364                    self.get_header_info(),
365                    &mut seq.iter().map(|x| (x.value.into(), x.index.widen_to_u16()))
366                );
367                true
368            }
369            PrefixedVariation::Group22Var2(seq) => {
370                handler.handle_counter(
371                    self.get_header_info(),
372                    &mut seq.iter().map(|x| (x.value.into(), x.index.widen_to_u16()))
373                );
374                true
375            }
376            PrefixedVariation::Group22Var5(seq) => {
377                handler.handle_counter(
378                    self.get_header_info(),
379                    &mut seq.iter().map(|x| (x.value.into(), x.index.widen_to_u16()))
380                );
381                true
382            }
383            PrefixedVariation::Group22Var6(seq) => {
384                handler.handle_counter(
385                    self.get_header_info(),
386                    &mut seq.iter().map(|x| (x.value.into(), x.index.widen_to_u16()))
387                );
388                true
389            }
390            PrefixedVariation::Group23Var1(seq) => {
391                handler.handle_frozen_counter(
392                    self.get_header_info(),
393                    &mut seq.iter().map(|x| (x.value.into(), x.index.widen_to_u16()))
394                );
395                true
396            }
397            PrefixedVariation::Group23Var2(seq) => {
398                handler.handle_frozen_counter(
399                    self.get_header_info(),
400                    &mut seq.iter().map(|x| (x.value.into(), x.index.widen_to_u16()))
401                );
402                true
403            }
404            PrefixedVariation::Group23Var5(seq) => {
405                handler.handle_frozen_counter(
406                    self.get_header_info(),
407                    &mut seq.iter().map(|x| (x.value.into(), x.index.widen_to_u16()))
408                );
409                true
410            }
411            PrefixedVariation::Group23Var6(seq) => {
412                handler.handle_frozen_counter(
413                    self.get_header_info(),
414                    &mut seq.iter().map(|x| (x.value.into(), x.index.widen_to_u16()))
415                );
416                true
417            }
418            PrefixedVariation::Group32Var1(seq) => {
419                handler.handle_analog_input(
420                    self.get_header_info(),
421                    &mut seq.iter().map(|x| (x.value.into(), x.index.widen_to_u16()))
422                );
423                true
424            }
425            PrefixedVariation::Group32Var2(seq) => {
426                handler.handle_analog_input(
427                    self.get_header_info(),
428                    &mut seq.iter().map(|x| (x.value.into(), x.index.widen_to_u16()))
429                );
430                true
431            }
432            PrefixedVariation::Group32Var3(seq) => {
433                handler.handle_analog_input(
434                    self.get_header_info(),
435                    &mut seq.iter().map(|x| (x.value.into(), x.index.widen_to_u16()))
436                );
437                true
438            }
439            PrefixedVariation::Group32Var4(seq) => {
440                handler.handle_analog_input(
441                    self.get_header_info(),
442                    &mut seq.iter().map(|x| (x.value.into(), x.index.widen_to_u16()))
443                );
444                true
445            }
446            PrefixedVariation::Group32Var5(seq) => {
447                handler.handle_analog_input(
448                    self.get_header_info(),
449                    &mut seq.iter().map(|x| (x.value.into(), x.index.widen_to_u16()))
450                );
451                true
452            }
453            PrefixedVariation::Group32Var6(seq) => {
454                handler.handle_analog_input(
455                    self.get_header_info(),
456                    &mut seq.iter().map(|x| (x.value.into(), x.index.widen_to_u16()))
457                );
458                true
459            }
460            PrefixedVariation::Group32Var7(seq) => {
461                handler.handle_analog_input(
462                    self.get_header_info(),
463                    &mut seq.iter().map(|x| (x.value.into(), x.index.widen_to_u16()))
464                );
465                true
466            }
467            PrefixedVariation::Group32Var8(seq) => {
468                handler.handle_analog_input(
469                    self.get_header_info(),
470                    &mut seq.iter().map(|x| (x.value.into(), x.index.widen_to_u16()))
471                );
472                true
473            }
474            PrefixedVariation::Group33Var1(seq) => {
475                handler.handle_frozen_analog_input(
476                    self.get_header_info(),
477                    &mut seq.iter().map(|x| (x.value.into(), x.index.widen_to_u16()))
478                );
479                true
480            }
481            PrefixedVariation::Group33Var2(seq) => {
482                handler.handle_frozen_analog_input(
483                    self.get_header_info(),
484                    &mut seq.iter().map(|x| (x.value.into(), x.index.widen_to_u16()))
485                );
486                true
487            }
488            PrefixedVariation::Group33Var3(seq) => {
489                handler.handle_frozen_analog_input(
490                    self.get_header_info(),
491                    &mut seq.iter().map(|x| (x.value.into(), x.index.widen_to_u16()))
492                );
493                true
494            }
495            PrefixedVariation::Group33Var4(seq) => {
496                handler.handle_frozen_analog_input(
497                    self.get_header_info(),
498                    &mut seq.iter().map(|x| (x.value.into(), x.index.widen_to_u16()))
499                );
500                true
501            }
502            PrefixedVariation::Group33Var5(seq) => {
503                handler.handle_frozen_analog_input(
504                    self.get_header_info(),
505                    &mut seq.iter().map(|x| (x.value.into(), x.index.widen_to_u16()))
506                );
507                true
508            }
509            PrefixedVariation::Group33Var6(seq) => {
510                handler.handle_frozen_analog_input(
511                    self.get_header_info(),
512                    &mut seq.iter().map(|x| (x.value.into(), x.index.widen_to_u16()))
513                );
514                true
515            }
516            PrefixedVariation::Group33Var7(seq) => {
517                handler.handle_frozen_analog_input(
518                    self.get_header_info(),
519                    &mut seq.iter().map(|x| (x.value.into(), x.index.widen_to_u16()))
520                );
521                true
522            }
523            PrefixedVariation::Group33Var8(seq) => {
524                handler.handle_frozen_analog_input(
525                    self.get_header_info(),
526                    &mut seq.iter().map(|x| (x.value.into(), x.index.widen_to_u16()))
527                );
528                true
529            }
530            PrefixedVariation::Group34Var1(_) => {
531                false // dead-band
532            }
533            PrefixedVariation::Group34Var2(_) => {
534                false // dead-band
535            }
536            PrefixedVariation::Group34Var3(_) => {
537                false // dead-band
538            }
539            PrefixedVariation::Group41Var1(_) => {
540                false // command
541            }
542            PrefixedVariation::Group41Var2(_) => {
543                false // command
544            }
545            PrefixedVariation::Group41Var3(_) => {
546                false // command
547            }
548            PrefixedVariation::Group41Var4(_) => {
549                false // command
550            }
551            PrefixedVariation::Group42Var1(seq) => {
552                handler.handle_analog_output_status(
553                    self.get_header_info(),
554                    &mut seq.iter().map(|x| (x.value.into(), x.index.widen_to_u16()))
555                );
556                true
557            }
558            PrefixedVariation::Group42Var2(seq) => {
559                handler.handle_analog_output_status(
560                    self.get_header_info(),
561                    &mut seq.iter().map(|x| (x.value.into(), x.index.widen_to_u16()))
562                );
563                true
564            }
565            PrefixedVariation::Group42Var3(seq) => {
566                handler.handle_analog_output_status(
567                    self.get_header_info(),
568                    &mut seq.iter().map(|x| (x.value.into(), x.index.widen_to_u16()))
569                );
570                true
571            }
572            PrefixedVariation::Group42Var4(seq) => {
573                handler.handle_analog_output_status(
574                    self.get_header_info(),
575                    &mut seq.iter().map(|x| (x.value.into(), x.index.widen_to_u16()))
576                );
577                true
578            }
579            PrefixedVariation::Group42Var5(seq) => {
580                handler.handle_analog_output_status(
581                    self.get_header_info(),
582                    &mut seq.iter().map(|x| (x.value.into(), x.index.widen_to_u16()))
583                );
584                true
585            }
586            PrefixedVariation::Group42Var6(seq) => {
587                handler.handle_analog_output_status(
588                    self.get_header_info(),
589                    &mut seq.iter().map(|x| (x.value.into(), x.index.widen_to_u16()))
590                );
591                true
592            }
593            PrefixedVariation::Group42Var7(seq) => {
594                handler.handle_analog_output_status(
595                    self.get_header_info(),
596                    &mut seq.iter().map(|x| (x.value.into(), x.index.widen_to_u16()))
597                );
598                true
599            }
600            PrefixedVariation::Group42Var8(seq) => {
601                handler.handle_analog_output_status(
602                    self.get_header_info(),
603                    &mut seq.iter().map(|x| (x.value.into(), x.index.widen_to_u16()))
604                );
605                true
606            }
607            PrefixedVariation::Group43Var1(seq) => {
608                handler.handle_analog_output_command_event(
609                    self.get_header_info(),
610                    &mut seq.iter().map(|x| (x.value.into(), x.index.widen_to_u16()))
611                );
612                true
613            }
614            PrefixedVariation::Group43Var2(seq) => {
615                handler.handle_analog_output_command_event(
616                    self.get_header_info(),
617                    &mut seq.iter().map(|x| (x.value.into(), x.index.widen_to_u16()))
618                );
619                true
620            }
621            PrefixedVariation::Group43Var3(seq) => {
622                handler.handle_analog_output_command_event(
623                    self.get_header_info(),
624                    &mut seq.iter().map(|x| (x.value.into(), x.index.widen_to_u16()))
625                );
626                true
627            }
628            PrefixedVariation::Group43Var4(seq) => {
629                handler.handle_analog_output_command_event(
630                    self.get_header_info(),
631                    &mut seq.iter().map(|x| (x.value.into(), x.index.widen_to_u16()))
632                );
633                true
634            }
635            PrefixedVariation::Group43Var5(seq) => {
636                handler.handle_analog_output_command_event(
637                    self.get_header_info(),
638                    &mut seq.iter().map(|x| (x.value.into(), x.index.widen_to_u16()))
639                );
640                true
641            }
642            PrefixedVariation::Group43Var6(seq) => {
643                handler.handle_analog_output_command_event(
644                    self.get_header_info(),
645                    &mut seq.iter().map(|x| (x.value.into(), x.index.widen_to_u16()))
646                );
647                true
648            }
649            PrefixedVariation::Group43Var7(seq) => {
650                handler.handle_analog_output_command_event(
651                    self.get_header_info(),
652                    &mut seq.iter().map(|x| (x.value.into(), x.index.widen_to_u16()))
653                );
654                true
655            }
656            PrefixedVariation::Group43Var8(seq) => {
657                handler.handle_analog_output_command_event(
658                    self.get_header_info(),
659                    &mut seq.iter().map(|x| (x.value.into(), x.index.widen_to_u16()))
660                );
661                true
662            }
663            PrefixedVariation::Group111VarX(_, seq) => {
664                handler.handle_octet_string(
665                    self.get_header_info(),
666                    &mut seq.iter().map(|x| (x.0, x.1.widen_to_u16()))
667                );
668                true
669            }
670        }
671    }
672    
673    pub(crate) fn get_header_info(&self) -> HeaderInfo {
674        match self {
675            PrefixedVariation::Group0(attr) => HeaderInfo::new(Variation::Group0(attr.variation), I::COUNT_AND_PREFIX_QUALIFIER, false, false),
676            PrefixedVariation::Group2Var1(_) => HeaderInfo::new(Variation::Group2Var1, I::COUNT_AND_PREFIX_QUALIFIER, true, true),
677            PrefixedVariation::Group2Var2(_) => HeaderInfo::new(Variation::Group2Var2, I::COUNT_AND_PREFIX_QUALIFIER, true, true),
678            PrefixedVariation::Group2Var3(_) => HeaderInfo::new(Variation::Group2Var3, I::COUNT_AND_PREFIX_QUALIFIER, true, true),
679            PrefixedVariation::Group4Var1(_) => HeaderInfo::new(Variation::Group4Var1, I::COUNT_AND_PREFIX_QUALIFIER, true, true),
680            PrefixedVariation::Group4Var2(_) => HeaderInfo::new(Variation::Group4Var2, I::COUNT_AND_PREFIX_QUALIFIER, true, true),
681            PrefixedVariation::Group4Var3(_) => HeaderInfo::new(Variation::Group4Var3, I::COUNT_AND_PREFIX_QUALIFIER, true, true),
682            PrefixedVariation::Group11Var1(_) => HeaderInfo::new(Variation::Group11Var1, I::COUNT_AND_PREFIX_QUALIFIER, true, true),
683            PrefixedVariation::Group11Var2(_) => HeaderInfo::new(Variation::Group11Var2, I::COUNT_AND_PREFIX_QUALIFIER, true, true),
684            PrefixedVariation::Group12Var1(_) => HeaderInfo::new(Variation::Group12Var1, I::COUNT_AND_PREFIX_QUALIFIER, false, false),
685            PrefixedVariation::Group13Var1(_) => HeaderInfo::new(Variation::Group13Var1, I::COUNT_AND_PREFIX_QUALIFIER, true, true),
686            PrefixedVariation::Group13Var2(_) => HeaderInfo::new(Variation::Group13Var2, I::COUNT_AND_PREFIX_QUALIFIER, true, true),
687            PrefixedVariation::Group22Var1(_) => HeaderInfo::new(Variation::Group22Var1, I::COUNT_AND_PREFIX_QUALIFIER, true, true),
688            PrefixedVariation::Group22Var2(_) => HeaderInfo::new(Variation::Group22Var2, I::COUNT_AND_PREFIX_QUALIFIER, true, true),
689            PrefixedVariation::Group22Var5(_) => HeaderInfo::new(Variation::Group22Var5, I::COUNT_AND_PREFIX_QUALIFIER, true, true),
690            PrefixedVariation::Group22Var6(_) => HeaderInfo::new(Variation::Group22Var6, I::COUNT_AND_PREFIX_QUALIFIER, true, true),
691            PrefixedVariation::Group23Var1(_) => HeaderInfo::new(Variation::Group23Var1, I::COUNT_AND_PREFIX_QUALIFIER, true, true),
692            PrefixedVariation::Group23Var2(_) => HeaderInfo::new(Variation::Group23Var2, I::COUNT_AND_PREFIX_QUALIFIER, true, true),
693            PrefixedVariation::Group23Var5(_) => HeaderInfo::new(Variation::Group23Var5, I::COUNT_AND_PREFIX_QUALIFIER, true, true),
694            PrefixedVariation::Group23Var6(_) => HeaderInfo::new(Variation::Group23Var6, I::COUNT_AND_PREFIX_QUALIFIER, true, true),
695            PrefixedVariation::Group32Var1(_) => HeaderInfo::new(Variation::Group32Var1, I::COUNT_AND_PREFIX_QUALIFIER, true, true),
696            PrefixedVariation::Group32Var2(_) => HeaderInfo::new(Variation::Group32Var2, I::COUNT_AND_PREFIX_QUALIFIER, true, true),
697            PrefixedVariation::Group32Var3(_) => HeaderInfo::new(Variation::Group32Var3, I::COUNT_AND_PREFIX_QUALIFIER, true, true),
698            PrefixedVariation::Group32Var4(_) => HeaderInfo::new(Variation::Group32Var4, I::COUNT_AND_PREFIX_QUALIFIER, true, true),
699            PrefixedVariation::Group32Var5(_) => HeaderInfo::new(Variation::Group32Var5, I::COUNT_AND_PREFIX_QUALIFIER, true, true),
700            PrefixedVariation::Group32Var6(_) => HeaderInfo::new(Variation::Group32Var6, I::COUNT_AND_PREFIX_QUALIFIER, true, true),
701            PrefixedVariation::Group32Var7(_) => HeaderInfo::new(Variation::Group32Var7, I::COUNT_AND_PREFIX_QUALIFIER, true, true),
702            PrefixedVariation::Group32Var8(_) => HeaderInfo::new(Variation::Group32Var8, I::COUNT_AND_PREFIX_QUALIFIER, true, true),
703            PrefixedVariation::Group33Var1(_) => HeaderInfo::new(Variation::Group33Var1, I::COUNT_AND_PREFIX_QUALIFIER, true, true),
704            PrefixedVariation::Group33Var2(_) => HeaderInfo::new(Variation::Group33Var2, I::COUNT_AND_PREFIX_QUALIFIER, true, true),
705            PrefixedVariation::Group33Var3(_) => HeaderInfo::new(Variation::Group33Var3, I::COUNT_AND_PREFIX_QUALIFIER, true, true),
706            PrefixedVariation::Group33Var4(_) => HeaderInfo::new(Variation::Group33Var4, I::COUNT_AND_PREFIX_QUALIFIER, true, true),
707            PrefixedVariation::Group33Var5(_) => HeaderInfo::new(Variation::Group33Var5, I::COUNT_AND_PREFIX_QUALIFIER, true, true),
708            PrefixedVariation::Group33Var6(_) => HeaderInfo::new(Variation::Group33Var6, I::COUNT_AND_PREFIX_QUALIFIER, true, true),
709            PrefixedVariation::Group33Var7(_) => HeaderInfo::new(Variation::Group33Var7, I::COUNT_AND_PREFIX_QUALIFIER, true, true),
710            PrefixedVariation::Group33Var8(_) => HeaderInfo::new(Variation::Group33Var8, I::COUNT_AND_PREFIX_QUALIFIER, true, true),
711            PrefixedVariation::Group34Var1(_) => HeaderInfo::new(Variation::Group34Var1, I::COUNT_AND_PREFIX_QUALIFIER, false, false),
712            PrefixedVariation::Group34Var2(_) => HeaderInfo::new(Variation::Group34Var2, I::COUNT_AND_PREFIX_QUALIFIER, false, false),
713            PrefixedVariation::Group34Var3(_) => HeaderInfo::new(Variation::Group34Var3, I::COUNT_AND_PREFIX_QUALIFIER, false, false),
714            PrefixedVariation::Group41Var1(_) => HeaderInfo::new(Variation::Group41Var1, I::COUNT_AND_PREFIX_QUALIFIER, false, false),
715            PrefixedVariation::Group41Var2(_) => HeaderInfo::new(Variation::Group41Var2, I::COUNT_AND_PREFIX_QUALIFIER, false, false),
716            PrefixedVariation::Group41Var3(_) => HeaderInfo::new(Variation::Group41Var3, I::COUNT_AND_PREFIX_QUALIFIER, false, false),
717            PrefixedVariation::Group41Var4(_) => HeaderInfo::new(Variation::Group41Var4, I::COUNT_AND_PREFIX_QUALIFIER, false, false),
718            PrefixedVariation::Group42Var1(_) => HeaderInfo::new(Variation::Group42Var1, I::COUNT_AND_PREFIX_QUALIFIER, true, true),
719            PrefixedVariation::Group42Var2(_) => HeaderInfo::new(Variation::Group42Var2, I::COUNT_AND_PREFIX_QUALIFIER, true, true),
720            PrefixedVariation::Group42Var3(_) => HeaderInfo::new(Variation::Group42Var3, I::COUNT_AND_PREFIX_QUALIFIER, true, true),
721            PrefixedVariation::Group42Var4(_) => HeaderInfo::new(Variation::Group42Var4, I::COUNT_AND_PREFIX_QUALIFIER, true, true),
722            PrefixedVariation::Group42Var5(_) => HeaderInfo::new(Variation::Group42Var5, I::COUNT_AND_PREFIX_QUALIFIER, true, true),
723            PrefixedVariation::Group42Var6(_) => HeaderInfo::new(Variation::Group42Var6, I::COUNT_AND_PREFIX_QUALIFIER, true, true),
724            PrefixedVariation::Group42Var7(_) => HeaderInfo::new(Variation::Group42Var7, I::COUNT_AND_PREFIX_QUALIFIER, true, true),
725            PrefixedVariation::Group42Var8(_) => HeaderInfo::new(Variation::Group42Var8, I::COUNT_AND_PREFIX_QUALIFIER, true, true),
726            PrefixedVariation::Group43Var1(_) => HeaderInfo::new(Variation::Group43Var1, I::COUNT_AND_PREFIX_QUALIFIER, true, false),
727            PrefixedVariation::Group43Var2(_) => HeaderInfo::new(Variation::Group43Var2, I::COUNT_AND_PREFIX_QUALIFIER, true, false),
728            PrefixedVariation::Group43Var3(_) => HeaderInfo::new(Variation::Group43Var3, I::COUNT_AND_PREFIX_QUALIFIER, true, false),
729            PrefixedVariation::Group43Var4(_) => HeaderInfo::new(Variation::Group43Var4, I::COUNT_AND_PREFIX_QUALIFIER, true, false),
730            PrefixedVariation::Group43Var5(_) => HeaderInfo::new(Variation::Group43Var5, I::COUNT_AND_PREFIX_QUALIFIER, true, false),
731            PrefixedVariation::Group43Var6(_) => HeaderInfo::new(Variation::Group43Var6, I::COUNT_AND_PREFIX_QUALIFIER, true, false),
732            PrefixedVariation::Group43Var7(_) => HeaderInfo::new(Variation::Group43Var7, I::COUNT_AND_PREFIX_QUALIFIER, true, false),
733            PrefixedVariation::Group43Var8(_) => HeaderInfo::new(Variation::Group43Var8, I::COUNT_AND_PREFIX_QUALIFIER, true, false),
734            PrefixedVariation::Group111VarX(x, _) =>  HeaderInfo::new(Variation::Group111(*x), I::COUNT_AND_PREFIX_QUALIFIER, true, false),
735        }
736    }
737}