route_verification_shared_struct/
stats.rs1#[derive(Copy, Clone, Debug, Default, Eq, PartialEq)]
2pub struct Counts {
3 pub lex_skip: usize,
4 pub syntax_err: usize,
5 pub unknown_lex_err: usize,
6 pub parse_path_attr: usize,
8 pub parse_aut_num: usize,
10 pub parse_as_set: usize,
12 pub parse_route_set: usize,
14 pub parse_peering_set: usize,
16 pub parse_filter_set: usize,
18 pub parse_as_route: usize,
20}
21
22impl std::ops::Add for Counts {
23 type Output = Counts;
24
25 fn add(self, rhs: Self) -> Self::Output {
26 Self {
27 lex_skip: self.lex_skip + rhs.lex_skip,
28 syntax_err: self.syntax_err + rhs.syntax_err,
29 unknown_lex_err: self.unknown_lex_err + rhs.unknown_lex_err,
30 parse_path_attr: self.parse_path_attr + rhs.parse_path_attr,
31 parse_aut_num: self.parse_aut_num + rhs.parse_aut_num,
32 parse_as_set: self.parse_as_set + rhs.parse_as_set,
33 parse_route_set: self.parse_route_set + rhs.parse_route_set,
34 parse_peering_set: self.parse_peering_set + rhs.parse_peering_set,
35 parse_filter_set: self.parse_filter_set + rhs.parse_filter_set,
36 parse_as_route: self.parse_as_route + rhs.parse_as_route,
37 }
38 }
39}
40
41impl std::fmt::Display for Counts {
42 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
43 let Self {
44 lex_skip,
45 syntax_err,
46 unknown_lex_err,
47 parse_path_attr,
48 parse_aut_num,
49 parse_as_set,
50 parse_route_set,
51 parse_peering_set,
52 parse_filter_set,
53 parse_as_route,
54 } = self;
55 [
56 (lex_skip, "skips during lexing"),
57 (syntax_err, "syntax errors"),
58 (unknown_lex_err, "unknown lex errors"),
59 (parse_path_attr, "unknown path attributes in filter"),
60 (parse_aut_num, "invalid AutNum names"),
61 (parse_as_set, "invalid names parsing AS Sets"),
62 (parse_route_set, "invalid Route Set names"),
63 (parse_peering_set, "invalid Peering Set names"),
64 (parse_filter_set, "invalid Filter Set names"),
65 (parse_as_route, "invalid AS Route"),
66 ]
67 .into_iter()
68 .filter(|(field, _)| **field > 0)
69 .enumerate()
70 .try_for_each(|(index, (field, desc))| {
71 if index > 0 {
72 f.write_fmt(format_args!(", {field} {desc}"))
73 } else {
74 f.write_fmt(format_args!("{field} {desc}"))
75 }
76 })
77 }
78}