1use 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 Group0(crate::app::attr::Attribute<'a>),
29 Group2Var1(CountSequence<'a, Prefix<I, Group2Var1>>),
31 Group2Var2(CountSequence<'a, Prefix<I, Group2Var2>>),
33 Group2Var3(CountSequence<'a, Prefix<I, Group2Var3>>),
35 Group4Var1(CountSequence<'a, Prefix<I, Group4Var1>>),
37 Group4Var2(CountSequence<'a, Prefix<I, Group4Var2>>),
39 Group4Var3(CountSequence<'a, Prefix<I, Group4Var3>>),
41 Group11Var1(CountSequence<'a, Prefix<I, Group11Var1>>),
43 Group11Var2(CountSequence<'a, Prefix<I, Group11Var2>>),
45 Group12Var1(CountSequence<'a, Prefix<I, Group12Var1>>),
47 Group13Var1(CountSequence<'a, Prefix<I, Group13Var1>>),
49 Group13Var2(CountSequence<'a, Prefix<I, Group13Var2>>),
51 Group22Var1(CountSequence<'a, Prefix<I, Group22Var1>>),
53 Group22Var2(CountSequence<'a, Prefix<I, Group22Var2>>),
55 Group22Var5(CountSequence<'a, Prefix<I, Group22Var5>>),
57 Group22Var6(CountSequence<'a, Prefix<I, Group22Var6>>),
59 Group23Var1(CountSequence<'a, Prefix<I, Group23Var1>>),
61 Group23Var2(CountSequence<'a, Prefix<I, Group23Var2>>),
63 Group23Var5(CountSequence<'a, Prefix<I, Group23Var5>>),
65 Group23Var6(CountSequence<'a, Prefix<I, Group23Var6>>),
67 Group32Var1(CountSequence<'a, Prefix<I, Group32Var1>>),
69 Group32Var2(CountSequence<'a, Prefix<I, Group32Var2>>),
71 Group32Var3(CountSequence<'a, Prefix<I, Group32Var3>>),
73 Group32Var4(CountSequence<'a, Prefix<I, Group32Var4>>),
75 Group32Var5(CountSequence<'a, Prefix<I, Group32Var5>>),
77 Group32Var6(CountSequence<'a, Prefix<I, Group32Var6>>),
79 Group32Var7(CountSequence<'a, Prefix<I, Group32Var7>>),
81 Group32Var8(CountSequence<'a, Prefix<I, Group32Var8>>),
83 Group33Var1(CountSequence<'a, Prefix<I, Group33Var1>>),
85 Group33Var2(CountSequence<'a, Prefix<I, Group33Var2>>),
87 Group33Var3(CountSequence<'a, Prefix<I, Group33Var3>>),
89 Group33Var4(CountSequence<'a, Prefix<I, Group33Var4>>),
91 Group33Var5(CountSequence<'a, Prefix<I, Group33Var5>>),
93 Group33Var6(CountSequence<'a, Prefix<I, Group33Var6>>),
95 Group33Var7(CountSequence<'a, Prefix<I, Group33Var7>>),
97 Group33Var8(CountSequence<'a, Prefix<I, Group33Var8>>),
99 Group34Var1(CountSequence<'a, Prefix<I, Group34Var1>>),
101 Group34Var2(CountSequence<'a, Prefix<I, Group34Var2>>),
103 Group34Var3(CountSequence<'a, Prefix<I, Group34Var3>>),
105 Group41Var1(CountSequence<'a, Prefix<I, Group41Var1>>),
107 Group41Var2(CountSequence<'a, Prefix<I, Group41Var2>>),
109 Group41Var3(CountSequence<'a, Prefix<I, Group41Var3>>),
111 Group41Var4(CountSequence<'a, Prefix<I, Group41Var4>>),
113 Group42Var1(CountSequence<'a, Prefix<I, Group42Var1>>),
115 Group42Var2(CountSequence<'a, Prefix<I, Group42Var2>>),
117 Group42Var3(CountSequence<'a, Prefix<I, Group42Var3>>),
119 Group42Var4(CountSequence<'a, Prefix<I, Group42Var4>>),
121 Group42Var5(CountSequence<'a, Prefix<I, Group42Var5>>),
123 Group42Var6(CountSequence<'a, Prefix<I, Group42Var6>>),
125 Group42Var7(CountSequence<'a, Prefix<I, Group42Var7>>),
127 Group42Var8(CountSequence<'a, Prefix<I, Group42Var8>>),
129 Group43Var1(CountSequence<'a, Prefix<I, Group43Var1>>),
131 Group43Var2(CountSequence<'a, Prefix<I, Group43Var2>>),
133 Group43Var3(CountSequence<'a, Prefix<I, Group43Var3>>),
135 Group43Var4(CountSequence<'a, Prefix<I, Group43Var4>>),
137 Group43Var5(CountSequence<'a, Prefix<I, Group43Var5>>),
139 Group43Var6(CountSequence<'a, Prefix<I, Group43Var6>>),
141 Group43Var7(CountSequence<'a, Prefix<I, Group43Var7>>),
143 Group43Var8(CountSequence<'a, Prefix<I, Group43Var8>>),
145 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 }
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 }
533 PrefixedVariation::Group34Var2(_) => {
534 false }
536 PrefixedVariation::Group34Var3(_) => {
537 false }
539 PrefixedVariation::Group41Var1(_) => {
540 false }
542 PrefixedVariation::Group41Var2(_) => {
543 false }
545 PrefixedVariation::Group41Var3(_) => {
546 false }
548 PrefixedVariation::Group41Var4(_) => {
549 false }
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}