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