Skip to main content

netlog/
constants.rs

1// Copyright (C) 2025, Cloudflare, Inc.
2// All rights reserved.
3//
4// Redistribution and use in source and binary forms, with or without
5// modification, are permitted provided that the following conditions are
6// met:
7//
8//     * Redistributions of source code must retain the above copyright notice,
9//       this list of conditions and the following disclaimer.
10//
11//     * Redistributions in binary form must reproduce the above copyright
12//       notice, this list of conditions and the following disclaimer in the
13//       documentation and/or other materials provided with the distribution.
14//
15// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
16// IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
17// THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
18// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
19// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
20// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
21// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
22// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
23// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
24// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
25// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
26
27use std::collections::HashMap;
28
29use serde::Deserialize;
30
31#[derive(Deserialize, Debug, Default)]
32pub struct ClientInfo {
33    pub cl: Option<String>,
34    pub command_line: Option<String>,
35    pub name: Option<String>,
36    pub official: Option<String>,
37    pub os_type: Option<String>,
38    pub version: Option<String>,
39    pub version_mod: Option<String>,
40}
41
42#[derive(Deserialize, Debug)]
43#[serde(rename_all = "camelCase")]
44pub struct Constants {
45    #[serde(skip)]
46    pub active_field_trial_groups_id_keyed: Vec<String>,
47    #[serde(skip)]
48    pub address_family_id_keyed: HashMap<i64, String>,
49    #[serde(skip)]
50    pub cert_path_builder_digest_policy_id_keyed: HashMap<i64, String>,
51    #[serde(skip)]
52    pub cert_status_flag_id_keyed: HashMap<i64, String>,
53    #[serde(skip)]
54    pub cert_verifier_flags_id_keyed: HashMap<i64, String>,
55    #[serde(skip)]
56    pub certificate_trust_type_id_keyed: HashMap<i64, String>,
57    #[serde(skip)]
58    pub dns_query_type_id_keyed: HashMap<i64, String>,
59    #[serde(skip)]
60    pub load_flag_id_keyed: HashMap<i64, String>,
61    #[serde(skip)]
62    pub load_state_id_keyed: HashMap<i64, String>,
63    #[serde(skip)]
64    pub log_event_phase_id_keyed: HashMap<i64, String>,
65    #[serde(skip)]
66    pub log_event_types_id_keyed: HashMap<i64, String>,
67    #[serde(skip)]
68    pub log_source_type_id_keyed: HashMap<i64, String>,
69    #[serde(skip)]
70    pub net_error_id_keyed: HashMap<i64, String>,
71    #[serde(skip)]
72    pub quic_error_id_keyed: HashMap<i64, String>,
73    #[serde(skip)]
74    pub quic_rst_stream_error_id_keyed: HashMap<i64, String>,
75    #[serde(skip)]
76    pub secure_dns_mode_id_keyed: HashMap<i64, String>,
77
78    pub active_field_trial_groups: Vec<String>,
79    pub address_family: HashMap<String, i64>,
80    pub cert_path_builder_digest_policy: HashMap<String, i64>,
81    pub cert_status_flag: HashMap<String, i64>,
82    pub cert_verifier_flags: HashMap<String, i64>,
83    pub certificate_trust_type: Option<HashMap<String, i64>>,
84    pub client_info: ClientInfo,
85    pub dns_query_type: HashMap<String, i64>,
86    pub load_flag: HashMap<String, i64>,
87    pub load_state: HashMap<String, i64>,
88    pub log_event_phase: HashMap<String, i64>,
89    pub log_event_types: HashMap<String, i64>,
90    pub log_format_version: u64,
91    pub log_source_type: HashMap<String, i64>,
92    pub net_error: HashMap<String, i64>,
93    pub quic_error: HashMap<String, i64>,
94    pub quic_rst_stream_error: HashMap<String, i64>,
95    pub secure_dns_mode: HashMap<String, i64>,
96
97    pub time_tick_offset: u64,
98}
99
100#[derive(Deserialize, Debug)]
101pub struct ConstantsLine {
102    pub constants: Constants,
103}
104
105impl Constants {
106    pub fn populate_id_keyed(&mut self) {
107        self.address_family_id_keyed = self
108            .address_family
109            .iter()
110            .map(|(k, v)| (*v, k.clone()))
111            .collect::<HashMap<_, _>>();
112
113        self.cert_path_builder_digest_policy_id_keyed = self
114            .cert_path_builder_digest_policy
115            .iter()
116            .map(|(k, v)| (*v, k.clone()))
117            .collect::<HashMap<_, _>>();
118
119        self.cert_status_flag_id_keyed = self
120            .cert_status_flag
121            .iter()
122            .map(|(k, v)| (*v, k.clone()))
123            .collect::<HashMap<_, _>>();
124
125        self.cert_verifier_flags_id_keyed = self
126            .cert_verifier_flags
127            .iter()
128            .map(|(k, v)| (*v, k.clone()))
129            .collect::<HashMap<_, _>>();
130
131        if let Some(trust_map) = &self.certificate_trust_type {
132            self.certificate_trust_type_id_keyed = trust_map
133                .iter()
134                .map(|(k, v)| (*v, k.clone()))
135                .collect::<HashMap<_, _>>();
136        }
137
138        self.dns_query_type_id_keyed = self
139            .dns_query_type
140            .iter()
141            .map(|(k, v)| (*v, k.clone()))
142            .collect::<HashMap<_, _>>();
143
144        self.load_flag_id_keyed = self
145            .load_flag
146            .iter()
147            .map(|(k, v)| (*v, k.clone()))
148            .collect::<HashMap<_, _>>();
149
150        self.load_state_id_keyed = self
151            .load_state
152            .iter()
153            .map(|(k, v)| (*v, k.clone()))
154            .collect::<HashMap<_, _>>();
155
156        self.log_event_phase_id_keyed = self
157            .log_event_phase
158            .iter()
159            .map(|(k, v)| (*v, k.clone()))
160            .collect::<HashMap<_, _>>();
161
162        self.log_event_types_id_keyed = self
163            .log_event_types
164            .iter()
165            .map(|(k, v)| (*v, k.clone()))
166            .collect::<HashMap<_, _>>();
167
168        self.log_source_type_id_keyed = self
169            .log_source_type
170            .iter()
171            .map(|(k, v)| (*v, k.clone()))
172            .collect::<HashMap<_, _>>();
173
174        self.net_error_id_keyed = self
175            .net_error
176            .iter()
177            .map(|(k, v)| (*v, k.clone()))
178            .collect::<HashMap<_, _>>();
179
180        self.quic_error_id_keyed = self
181            .quic_error
182            .iter()
183            .map(|(k, v)| (*v, k.clone()))
184            .collect::<HashMap<_, _>>();
185
186        self.quic_rst_stream_error_id_keyed = self
187            .quic_rst_stream_error
188            .iter()
189            .map(|(k, v)| (*v, k.clone()))
190            .collect::<HashMap<_, _>>();
191
192        self.secure_dns_mode_id_keyed = self
193            .secure_dns_mode
194            .iter()
195            .map(|(k, v)| (*v, k.clone()))
196            .collect::<HashMap<_, _>>();
197    }
198}