automapper_validation/generated/fv2604/
comdis_conditions_fv2604.rs1#[allow(unused_imports)]
8use crate::eval::format_validators::*;
9use crate::eval::{ConditionEvaluator, ConditionResult, EvaluationContext};
10
11pub struct ComdisConditionEvaluatorFV2604 {
13 external_conditions: std::collections::HashSet<u32>,
15}
16
17impl Default for ComdisConditionEvaluatorFV2604 {
18 fn default() -> Self {
19 let mut external_conditions = std::collections::HashSet::new();
20 external_conditions.insert(3);
21 external_conditions.insert(23);
22 external_conditions.insert(24);
23 external_conditions.insert(25);
24 external_conditions.insert(26);
25 external_conditions.insert(27);
26 external_conditions.insert(28);
27 external_conditions.insert(29);
28 external_conditions.insert(30);
29 external_conditions.insert(492);
30 external_conditions.insert(493);
31 Self {
32 external_conditions,
33 }
34 }
35}
36
37impl ConditionEvaluator for ComdisConditionEvaluatorFV2604 {
38 fn message_type(&self) -> &str {
39 "COMDIS"
40 }
41
42 fn format_version(&self) -> &str {
43 "FV2604"
44 }
45
46 fn evaluate(&self, condition: u32, ctx: &EvaluationContext) -> ConditionResult {
47 match condition {
48 1 => self.evaluate_1(ctx),
49 2 => self.evaluate_2(ctx),
50 3 => self.evaluate_3(ctx),
51 4 => self.evaluate_4(ctx),
52 5 => self.evaluate_5(ctx),
53 6 => self.evaluate_6(ctx),
54 7 => self.evaluate_7(ctx),
55 8 => self.evaluate_8(ctx),
56 9 => self.evaluate_9(ctx),
57 10 => self.evaluate_10(ctx),
58 11 => self.evaluate_11(ctx),
59 12 => self.evaluate_12(ctx),
60 13 => self.evaluate_13(ctx),
61 14 => self.evaluate_14(ctx),
62 15 => self.evaluate_15(ctx),
63 16 => self.evaluate_16(ctx),
64 17 => self.evaluate_17(ctx),
65 18 => self.evaluate_18(ctx),
66 19 => self.evaluate_19(ctx),
67 20 => self.evaluate_20(ctx),
68 21 => self.evaluate_21(ctx),
69 22 => self.evaluate_22(ctx),
70 23 => self.evaluate_23(ctx),
71 24 => self.evaluate_24(ctx),
72 25 => self.evaluate_25(ctx),
73 26 => self.evaluate_26(ctx),
74 27 => self.evaluate_27(ctx),
75 28 => self.evaluate_28(ctx),
76 29 => self.evaluate_29(ctx),
77 30 => self.evaluate_30(ctx),
78 31 => self.evaluate_31(ctx),
79 32 => self.evaluate_32(ctx),
80 33 => self.evaluate_33(ctx),
81 34 => self.evaluate_34(ctx),
82 492 => self.evaluate_492(ctx),
83 493 => self.evaluate_493(ctx),
84 505 => self.evaluate_505(ctx),
85 506 => self.evaluate_506(ctx),
86 508 => self.evaluate_508(ctx),
87 509 => self.evaluate_509(ctx),
88 510 => self.evaluate_510(ctx),
89 930 => self.evaluate_930(ctx),
90 931 => self.evaluate_931(ctx),
91 939 => self.evaluate_939(ctx),
92 940 => self.evaluate_940(ctx),
93 _ => ConditionResult::Unknown,
94 }
95 }
96
97 fn is_external(&self, condition: u32) -> bool {
98 self.external_conditions.contains(&condition)
99 }
100 fn is_known(&self, condition: u32) -> bool {
101 matches!(
102 condition,
103 1 | 2
104 | 3
105 | 4
106 | 5
107 | 6
108 | 7
109 | 8
110 | 9
111 | 10
112 | 11
113 | 12
114 | 13
115 | 14
116 | 15
117 | 16
118 | 17
119 | 18
120 | 19
121 | 20
122 | 21
123 | 22
124 | 23
125 | 24
126 | 25
127 | 26
128 | 27
129 | 28
130 | 29
131 | 30
132 | 31
133 | 32
134 | 33
135 | 34
136 | 492
137 | 493
138 | 505
139 | 506
140 | 508
141 | 509
142 | 510
143 | 930
144 | 931
145 | 939
146 | 940
147 )
148 }
149}
150
151impl ComdisConditionEvaluatorFV2604 {
152 fn evaluate_1(&self, ctx: &EvaluationContext) -> ConditionResult {
154 let ajt_segs = ctx.find_segments("AJT");
155 if ajt_segs.is_empty() {
156 return ConditionResult::Unknown;
157 }
158 for seg in &ajt_segs {
159 let q = seg
160 .elements
161 .first()
162 .and_then(|e| e.first())
163 .map(|s| s.as_str())
164 .unwrap_or("");
165 let v = seg
166 .elements
167 .get(1)
168 .and_then(|e| e.first())
169 .map(|s| s.as_str())
170 .unwrap_or("");
171 if (q == "Z61" || q == "Z62") && v == "S" {
172 return ConditionResult::True;
173 }
174 }
175 ConditionResult::False
176 }
177
178 fn evaluate_2(&self, ctx: &EvaluationContext) -> ConditionResult {
180 let ajt_segs = ctx.find_segments("AJT");
181 if ajt_segs.is_empty() {
182 return ConditionResult::Unknown;
183 }
184 for seg in &ajt_segs {
185 let q = seg
186 .elements
187 .first()
188 .and_then(|e| e.first())
189 .map(|s| s.as_str())
190 .unwrap_or("");
191 let v = seg
192 .elements
193 .get(1)
194 .and_then(|e| e.first())
195 .map(|s| s.as_str())
196 .unwrap_or("");
197 if (q == "Z58" || q == "Z59" || q == "Z60") && v == "S" {
198 return ConditionResult::True;
199 }
200 }
201 ConditionResult::False
202 }
203
204 fn evaluate_31(&self, ctx: &EvaluationContext) -> ConditionResult {
206 let ajt_segs = ctx.find_segments("AJT");
207 if ajt_segs.is_empty() {
208 return ConditionResult::Unknown;
209 }
210 for seg in &ajt_segs {
211 let q = seg
212 .elements
213 .first()
214 .and_then(|e| e.first())
215 .map(|s| s.as_str())
216 .unwrap_or("");
217 let v = seg
218 .elements
219 .get(1)
220 .and_then(|e| e.first())
221 .map(|s| s.as_str())
222 .unwrap_or("");
223 if (q == "Z61" || q == "Z62") && v == "G" {
224 return ConditionResult::True;
225 }
226 }
227 ConditionResult::False
228 }
229
230 fn evaluate_32(&self, ctx: &EvaluationContext) -> ConditionResult {
232 let ajt_segs = ctx.find_segments("AJT");
233 if ajt_segs.is_empty() {
234 return ConditionResult::Unknown;
235 }
236 for seg in &ajt_segs {
237 let q = seg
238 .elements
239 .first()
240 .and_then(|e| e.first())
241 .map(|s| s.as_str())
242 .unwrap_or("");
243 let v = seg
244 .elements
245 .get(1)
246 .and_then(|e| e.first())
247 .map(|s| s.as_str())
248 .unwrap_or("");
249 if (q == "Z58" || q == "Z59" || q == "Z60") && v == "G" {
250 return ConditionResult::True;
251 }
252 }
253 ConditionResult::False
254 }
255
256 fn evaluate_33(&self, ctx: &EvaluationContext) -> ConditionResult {
258 let qualifiers = ["Z58", "Z59", "Z60", "Z61", "Z62"];
259 let ajt_segs = ctx.find_segments("AJT");
260 if ajt_segs.is_empty() {
261 return ConditionResult::Unknown;
262 }
263 for seg in &ajt_segs {
264 let q = seg
265 .elements
266 .first()
267 .and_then(|e| e.first())
268 .map(|s| s.as_str())
269 .unwrap_or("");
270 let v = seg
271 .elements
272 .get(1)
273 .and_then(|e| e.first())
274 .map(|s| s.as_str())
275 .unwrap_or("");
276 if qualifiers.contains(&q) && v == "G" {
277 return ConditionResult::True;
278 }
279 }
280 ConditionResult::False
281 }
282
283 fn evaluate_34(&self, ctx: &EvaluationContext) -> ConditionResult {
285 ctx.has_segment_matching("AJT", &[(0, 0, "A99"), (1, 0, "G")])
286 }
287
288 fn evaluate_3(&self, ctx: &EvaluationContext) -> ConditionResult {
291 ctx.external.evaluate("mp_id_from_electricity_sector")
292 }
293
294 fn evaluate_4(&self, ctx: &EvaluationContext) -> ConditionResult {
296 ConditionResult::from(ctx.find_segments("AJT").iter().any(|seg| {
297 let q = seg
298 .elements
299 .first()
300 .and_then(|e| e.first())
301 .map(|s| s.as_str());
302 let p = seg
303 .elements
304 .get(1)
305 .and_then(|e| e.first())
306 .map(|s| s.as_str());
307 matches!(
308 q,
309 Some("Z58") | Some("Z59") | Some("Z60") | Some("Z61") | Some("Z62")
310 ) && p == Some("S")
311 }))
312 }
313
314 fn evaluate_5(&self, ctx: &EvaluationContext) -> ConditionResult {
316 ConditionResult::from(ctx.find_segments("AJT").iter().any(|seg| {
317 let q = seg
318 .elements
319 .first()
320 .and_then(|e| e.first())
321 .map(|s| s.as_str());
322 let p = seg
323 .elements
324 .get(1)
325 .and_then(|e| e.first())
326 .map(|s| s.as_str());
327 matches!(
328 q,
329 Some("A01")
330 | Some("A02")
331 | Some("A03")
332 | Some("A04")
333 | Some("A06")
334 | Some("A07")
335 | Some("A09")
336 | Some("A12")
337 | Some("A15")
338 ) && p == Some("E")
339 }))
340 }
341
342 fn evaluate_6(&self, ctx: &EvaluationContext) -> ConditionResult {
344 ConditionResult::from(ctx.find_segments("AJT").iter().any(|seg| {
345 let q = seg
346 .elements
347 .first()
348 .and_then(|e| e.first())
349 .map(|s| s.as_str());
350 let p = seg
351 .elements
352 .get(1)
353 .and_then(|e| e.first())
354 .map(|s| s.as_str());
355 q == Some("A07") && p == Some("E")
356 }))
357 }
358
359 fn evaluate_7(&self, ctx: &EvaluationContext) -> ConditionResult {
361 ConditionResult::from(ctx.find_segments("AJT").iter().any(|seg| {
362 let q = seg
363 .elements
364 .first()
365 .and_then(|e| e.first())
366 .map(|s| s.as_str());
367 let p = seg
368 .elements
369 .get(1)
370 .and_then(|e| e.first())
371 .map(|s| s.as_str());
372 q == Some("A02") && p == Some("E")
373 }))
374 }
375
376 fn evaluate_8(&self, ctx: &EvaluationContext) -> ConditionResult {
378 ConditionResult::from(ctx.find_segments("AJT").iter().any(|seg| {
379 let q = seg
380 .elements
381 .first()
382 .and_then(|e| e.first())
383 .map(|s| s.as_str());
384 let p = seg
385 .elements
386 .get(1)
387 .and_then(|e| e.first())
388 .map(|s| s.as_str());
389 matches!(
390 q,
391 Some("A01") | Some("A04") | Some("A06") | Some("A09") | Some("A12")
392 ) && p == Some("E")
393 }))
394 }
395
396 fn evaluate_9(&self, ctx: &EvaluationContext) -> ConditionResult {
398 ConditionResult::from(ctx.find_segments("AJT").iter().any(|seg| {
399 let q = seg
400 .elements
401 .first()
402 .and_then(|e| e.first())
403 .map(|s| s.as_str());
404 let p = seg
405 .elements
406 .get(1)
407 .and_then(|e| e.first())
408 .map(|s| s.as_str());
409 matches!(q, Some("A05") | Some("A10") | Some("A11") | Some("A14")) && p == Some("E")
410 }))
411 }
412
413 fn evaluate_10(&self, ctx: &EvaluationContext) -> ConditionResult {
415 ConditionResult::from(ctx.find_segments("AJT").iter().any(|seg| {
416 let q = seg
417 .elements
418 .first()
419 .and_then(|e| e.first())
420 .map(|s| s.as_str());
421 let p = seg
422 .elements
423 .get(1)
424 .and_then(|e| e.first())
425 .map(|s| s.as_str());
426 q == Some("A03") && p == Some("E")
427 }))
428 }
429
430 fn evaluate_11(&self, ctx: &EvaluationContext) -> ConditionResult {
432 ConditionResult::from(ctx.find_segments("AJT").iter().any(|seg| {
433 let q = seg
434 .elements
435 .first()
436 .and_then(|e| e.first())
437 .map(|s| s.as_str());
438 let p = seg
439 .elements
440 .get(1)
441 .and_then(|e| e.first())
442 .map(|s| s.as_str());
443 q == Some("A15") && p == Some("E")
444 }))
445 }
446
447 fn evaluate_12(&self, ctx: &EvaluationContext) -> ConditionResult {
449 ConditionResult::from(ctx.find_segments("AJT").iter().any(|seg| {
450 let q = seg
451 .elements
452 .first()
453 .and_then(|e| e.first())
454 .map(|s| s.as_str());
455 let p = seg
456 .elements
457 .get(1)
458 .and_then(|e| e.first())
459 .map(|s| s.as_str());
460 q == Some("A99") && p == Some("S")
461 }))
462 }
463
464 fn evaluate_13(&self, ctx: &EvaluationContext) -> ConditionResult {
466 ConditionResult::from(ctx.find_segments("AJT").iter().any(|seg| {
467 let q = seg
468 .elements
469 .first()
470 .and_then(|e| e.first())
471 .map(|s| s.as_str());
472 let p = seg
473 .elements
474 .get(1)
475 .and_then(|e| e.first())
476 .map(|s| s.as_str());
477 q == Some("A07") && p == Some("E")
478 }))
479 }
480
481 fn evaluate_14(&self, ctx: &EvaluationContext) -> ConditionResult {
483 ConditionResult::from(ctx.find_segments("AJT").iter().any(|seg| {
484 let q = seg
485 .elements
486 .first()
487 .and_then(|e| e.first())
488 .map(|s| s.as_str());
489 let p = seg
490 .elements
491 .get(1)
492 .and_then(|e| e.first())
493 .map(|s| s.as_str());
494 q == Some("A02") && p == Some("E")
495 }))
496 }
497
498 fn evaluate_15(&self, ctx: &EvaluationContext) -> ConditionResult {
500 ConditionResult::from(ctx.find_segments("AJT").iter().any(|seg| {
501 let q = seg
502 .elements
503 .first()
504 .and_then(|e| e.first())
505 .map(|s| s.as_str());
506 let p = seg
507 .elements
508 .get(1)
509 .and_then(|e| e.first())
510 .map(|s| s.as_str());
511 matches!(q, Some("A01") | Some("A04") | Some("A06") | Some("A09")) && p == Some("E")
512 }))
513 }
514
515 fn evaluate_16(&self, ctx: &EvaluationContext) -> ConditionResult {
517 ctx.has_qualified_value("AJT", 0, "A03", 1, 0, &["E_1008"])
518 }
519
520 fn evaluate_17(&self, ctx: &EvaluationContext) -> ConditionResult {
522 ctx.has_qualified_value("AJT", 0, "A15", 1, 0, &["E_1008"])
523 }
524
525 fn evaluate_18(&self, ctx: &EvaluationContext) -> ConditionResult {
527 let ajt_segments = ctx.find_segments("AJT");
528 let found = ajt_segments.iter().any(|seg| {
529 let qual = seg
530 .elements
531 .first()
532 .and_then(|e| e.first())
533 .map(|s| s.as_str());
534 let pos = seg
535 .elements
536 .get(1)
537 .and_then(|e| e.first())
538 .map(|s| s.as_str());
539 matches!(qual, Some("A05") | Some("A10") | Some("A11")) && pos == Some("E_1008")
540 });
541 ConditionResult::from(found)
542 }
543
544 fn evaluate_19(&self, ctx: &EvaluationContext) -> ConditionResult {
546 ctx.has_qualified_value(
547 "AJT",
548 0,
549 "A99",
550 1,
551 0,
552 &["E_0265", "E_0271", "E_0274", "E_0516", "E_0520", "E_0567"],
553 )
554 }
555
556 fn evaluate_20(&self, ctx: &EvaluationContext) -> ConditionResult {
558 let ajt_segments = ctx.find_segments("AJT");
559 let found = ajt_segments.iter().any(|seg| {
560 let qual = seg
561 .elements
562 .first()
563 .and_then(|e| e.first())
564 .map(|s| s.as_str());
565 let pos = seg
566 .elements
567 .get(1)
568 .and_then(|e| e.first())
569 .map(|s| s.as_str());
570 matches!(
571 qual,
572 Some("A01")
573 | Some("A02")
574 | Some("A03")
575 | Some("A04")
576 | Some("A06")
577 | Some("A07")
578 | Some("A09")
579 | Some("A15")
580 ) && pos == Some("E_1008")
581 });
582 ConditionResult::from(found)
583 }
584
585 fn evaluate_21(&self, ctx: &EvaluationContext) -> ConditionResult {
587 let com_segments = ctx.find_segments("COM");
588 ConditionResult::from(com_segments.iter().any(|seg| {
589 seg.elements
590 .first()
591 .and_then(|e| e.get(1))
592 .map(|s| s.as_str())
593 == Some("EM")
594 }))
595 }
596
597 fn evaluate_22(&self, ctx: &EvaluationContext) -> ConditionResult {
599 let com_segments = ctx.find_segments("COM");
600 ConditionResult::from(com_segments.iter().any(|seg| {
601 matches!(
602 seg.elements
603 .first()
604 .and_then(|e| e.get(1))
605 .map(|s| s.as_str()),
606 Some("TE") | Some("FX") | Some("AJ") | Some("AL")
607 )
608 }))
609 }
610
611 fn evaluate_23(&self, ctx: &EvaluationContext) -> ConditionResult {
614 ctx.external.evaluate("sender_is_msb")
615 }
616
617 fn evaluate_24(&self, ctx: &EvaluationContext) -> ConditionResult {
620 ctx.external.evaluate("recipient_is_esa")
621 }
622
623 fn evaluate_25(&self, ctx: &EvaluationContext) -> ConditionResult {
626 ctx.external.evaluate("recipient_is_lf")
627 }
628
629 fn evaluate_26(&self, ctx: &EvaluationContext) -> ConditionResult {
632 ctx.external.evaluate("recipient_is_nb")
633 }
634
635 fn evaluate_27(&self, ctx: &EvaluationContext) -> ConditionResult {
638 ctx.external.evaluate("sender_is_nb")
639 }
640
641 fn evaluate_28(&self, ctx: &EvaluationContext) -> ConditionResult {
645 ctx.external.evaluate("responding_to_contrl")
646 }
647
648 fn evaluate_29(&self, ctx: &EvaluationContext) -> ConditionResult {
652 ctx.external.evaluate("responding_to_aperak")
653 }
654
655 fn evaluate_30(&self, ctx: &EvaluationContext) -> ConditionResult {
659 ctx.external.evaluate("responding_to_aperak")
660 }
661
662 fn evaluate_492(&self, ctx: &EvaluationContext) -> ConditionResult {
666 ctx.external.evaluate("recipient_is_electricity_sector")
667 }
668
669 fn evaluate_493(&self, ctx: &EvaluationContext) -> ConditionResult {
673 ctx.external.evaluate("recipient_is_gas_sector")
674 }
675
676 fn evaluate_505(&self, _ctx: &EvaluationContext) -> ConditionResult {
678 ConditionResult::True
679 }
680
681 fn evaluate_506(&self, _ctx: &EvaluationContext) -> ConditionResult {
683 ConditionResult::True
684 }
685
686 fn evaluate_508(&self, _ctx: &EvaluationContext) -> ConditionResult {
688 ConditionResult::True
690 }
691
692 fn evaluate_509(&self, _ctx: &EvaluationContext) -> ConditionResult {
694 ConditionResult::True
696 }
697
698 fn evaluate_510(&self, _ctx: &EvaluationContext) -> ConditionResult {
700 ConditionResult::True
702 }
703
704 fn evaluate_930(&self, ctx: &EvaluationContext) -> ConditionResult {
707 let segs = ctx.find_segments("MOA");
709 match segs
710 .first()
711 .and_then(|s| s.elements.first())
712 .and_then(|e| e.get(1))
713 {
714 Some(val) => validate_max_decimal_places(val, 2),
715 None => ConditionResult::False, }
717 }
718
719 fn evaluate_931(&self, ctx: &EvaluationContext) -> ConditionResult {
721 let dtm_segs = ctx.find_segments("DTM");
723 match dtm_segs
724 .first()
725 .and_then(|s| s.elements.first())
726 .and_then(|e| e.get(1))
727 {
728 Some(val) => validate_timezone_utc(val),
729 None => ConditionResult::False, }
731 }
732
733 fn evaluate_939(&self, ctx: &EvaluationContext) -> ConditionResult {
735 let segs = ctx.find_segments("COM");
736 match segs
737 .first()
738 .and_then(|s| s.elements.first())
739 .and_then(|e| e.first())
740 {
741 Some(val) => validate_email(val),
742 None => ConditionResult::False, }
744 }
745
746 fn evaluate_940(&self, ctx: &EvaluationContext) -> ConditionResult {
748 let segs = ctx.find_segments("COM");
749 match segs
750 .first()
751 .and_then(|s| s.elements.first())
752 .and_then(|e| e.first())
753 {
754 Some(val) => validate_phone(val),
755 None => ConditionResult::False, }
757 }
758}