@@ -10,8 +10,8 @@ use thiserror::Error;
1010use xash3d_protocol:: { admin, filter:: Version } ;
1111
1212pub const DEFAULT_MASTER_SERVER_IP : IpAddr = IpAddr :: V4 ( Ipv4Addr :: UNSPECIFIED ) ;
13-
1413pub const DEFAULT_MASTER_SERVER_PORT : u16 = 27010 ;
14+
1515pub const DEFAULT_CHALLENGE_TIMEOUT : u32 = 10 ;
1616pub const DEFAULT_SERVER_TIMEOUT : u32 = 300 ;
1717pub const DEFAULT_ADMIN_TIMEOUT : u32 = 10 ;
@@ -20,6 +20,9 @@ pub const DEFAULT_MAX_SERVERS_PER_IP: u16 = 14;
2020
2121pub const DEFAULT_HASH_LEN : usize = admin:: HASH_LEN ;
2222
23+ pub const DEFAULT_SERVER_MIN_VERSION : Version = Version :: with_patch ( 0 , 19 , 2 ) ;
24+ pub const DEFAULT_CLIENT_MIN_VERSION : Version = Version :: new ( 0 , 19 ) ;
25+
2326// Disabled if zero.
2427pub const DEFAULT_MIN_ENGINE_BUILDNUM : u32 = 0 ;
2528
@@ -30,19 +33,6 @@ pub const DEFAULT_MIN_ENGINE_BUILDNUM: u32 = 0;
3033// Disabled if zero.
3134pub const DEFAULT_MIN_OLD_ENGINE_BUILDNUM : u32 = 3500 ;
3235
33- macro_rules! impl_helpers {
34- ( $( $f: ident: $t: ty) ,+$( , ) ?) => (
35- $( const fn $f<const N : $t>( ) -> $t { N } ) +
36- ) ;
37- }
38-
39- impl_helpers ! {
40- default_bool: bool ,
41- default_u16: u16 ,
42- default_u32: u32 ,
43- default_usize: usize ,
44- }
45-
4636#[ derive( Debug , Error ) ]
4737pub enum Error {
4838 #[ error( transparent) ]
@@ -54,45 +44,40 @@ pub enum Error {
5444#[ derive( Clone , Default , Deserialize , Debug ) ]
5545#[ serde( deny_unknown_fields) ]
5646#[ serde( rename_all = "kebab-case" ) ]
47+ #[ serde( default ) ]
5748pub struct Config {
58- #[ serde( default ) ]
5949 pub log : LogConfig ,
6050 #[ serde( flatten) ]
6151 pub master : MasterConfig ,
62- #[ serde( default ) ]
6352 pub stat : StatConfig ,
6453}
6554
6655#[ derive( Clone , Default , Deserialize , Debug ) ]
6756#[ serde( deny_unknown_fields) ]
6857#[ serde( rename_all = "kebab-case" ) ]
58+ #[ serde( default ) ]
6959pub struct MasterConfig {
70- #[ serde( default ) ]
7160 pub server : ServerConfig ,
72- #[ serde( default ) ]
7361 pub client : ClientConfig ,
74- #[ serde( default ) ]
7562 pub hash : HashConfig ,
7663 #[ serde( rename = "admin" ) ]
77- #[ serde( default ) ]
7864 pub admin_list : Box < [ AdminConfig ] > ,
7965}
8066
8167#[ derive( Clone , Deserialize , Debug ) ]
8268#[ serde( deny_unknown_fields) ]
8369#[ serde( rename_all = "kebab-case" ) ]
70+ #[ serde( default ) ]
8471pub struct LogConfig {
85- #[ serde( default = "default_log_level" ) ]
8672 #[ serde( deserialize_with = "deserialize_log_level" ) ]
8773 pub level : LevelFilter ,
88- #[ serde( default = "default_bool::<true>" ) ]
8974 pub time : bool ,
9075}
9176
9277impl Default for LogConfig {
9378 fn default ( ) -> Self {
9479 Self {
95- level : default_log_level ( ) ,
80+ level : LevelFilter :: Info ,
9681 time : true ,
9782 }
9883 }
@@ -101,27 +86,23 @@ impl Default for LogConfig {
10186#[ derive( Clone , Deserialize , Debug ) ]
10287#[ serde( deny_unknown_fields) ]
10388#[ serde( rename_all = "kebab-case" ) ]
89+ #[ serde( default ) ]
10490pub struct ServerConfig {
105- #[ serde( default = "default_server_ip" ) ]
10691 pub ip : IpAddr ,
107- #[ serde( default = "default_u16::<DEFAULT_MASTER_SERVER_PORT>" ) ]
10892 pub port : u16 ,
109- #[ serde( default = "default_u16::<DEFAULT_MAX_SERVERS_PER_IP>" ) ]
11093 pub max_servers_per_ip : u16 ,
111- #[ serde( default = "default_server_version" ) ]
11294 #[ serde( deserialize_with = "deserialize_version" ) ]
11395 pub min_version : Version ,
114- #[ serde( default ) ]
11596 pub timeout : TimeoutConfig ,
11697}
11798
11899impl Default for ServerConfig {
119100 fn default ( ) -> Self {
120101 Self {
121- ip : default_server_ip ( ) ,
102+ ip : DEFAULT_MASTER_SERVER_IP ,
122103 port : DEFAULT_MASTER_SERVER_PORT ,
123104 max_servers_per_ip : DEFAULT_MAX_SERVERS_PER_IP ,
124- min_version : default_server_version ( ) ,
105+ min_version : DEFAULT_SERVER_MIN_VERSION ,
125106 timeout : Default :: default ( ) ,
126107 }
127108 }
@@ -130,12 +111,10 @@ impl Default for ServerConfig {
130111#[ derive( Clone , Deserialize , Debug ) ]
131112#[ serde( deny_unknown_fields) ]
132113#[ serde( rename_all = "kebab-case" ) ]
114+ #[ serde( default ) ]
133115pub struct TimeoutConfig {
134- #[ serde( default = "default_u32::<DEFAULT_CHALLENGE_TIMEOUT>" ) ]
135116 pub challenge : u32 ,
136- #[ serde( default = "default_u32::<DEFAULT_SERVER_TIMEOUT>" ) ]
137117 pub server : u32 ,
138- #[ serde( default = "default_u32::<DEFAULT_ADMIN_TIMEOUT>" ) ]
139118 pub admin : u32 ,
140119}
141120
@@ -152,30 +131,25 @@ impl Default for TimeoutConfig {
152131#[ derive( Clone , Deserialize , Debug ) ]
153132#[ serde( deny_unknown_fields) ]
154133#[ serde( rename_all = "kebab-case" ) ]
134+ #[ serde( default ) ]
155135pub struct ClientConfig {
156- #[ serde( default = "default_client_version" ) ]
157136 #[ serde( deserialize_with = "deserialize_version" ) ]
158137 pub min_version : Version ,
159- #[ serde( default = "default_u32::<DEFAULT_MIN_ENGINE_BUILDNUM>" ) ]
160138 pub min_engine_buildnum : u32 ,
161- #[ serde( default = "default_u32::<DEFAULT_MIN_OLD_ENGINE_BUILDNUM>" ) ]
162139 pub min_old_engine_buildnum : u32 ,
163- #[ serde( default = "default_client_update_map" ) ]
164140 pub update_map : Box < str > ,
165- #[ serde( default = "default_client_update_title" ) ]
166141 pub update_title : Box < str > ,
167- #[ serde( default ) ]
168142 pub update_addr : Option < Box < str > > ,
169143}
170144
171145impl Default for ClientConfig {
172146 fn default ( ) -> Self {
173147 Self {
174- min_version : default_client_version ( ) ,
148+ min_version : DEFAULT_CLIENT_MIN_VERSION ,
175149 min_engine_buildnum : DEFAULT_MIN_ENGINE_BUILDNUM ,
176150 min_old_engine_buildnum : DEFAULT_MIN_OLD_ENGINE_BUILDNUM ,
177- update_map : default_client_update_map ( ) ,
178- update_title : default_client_update_title ( ) ,
151+ update_map : Box :: from ( "Update please" ) ,
152+ update_title : Box :: from ( "https://github.com/FWGS/xash3d-fwgs" ) ,
179153 update_addr : None ,
180154 }
181155 }
@@ -184,21 +158,19 @@ impl Default for ClientConfig {
184158#[ derive( Clone , Deserialize , Debug ) ]
185159#[ serde( deny_unknown_fields) ]
186160#[ serde( rename_all = "kebab-case" ) ]
161+ #[ serde( default ) ]
187162pub struct HashConfig {
188- #[ serde( default = "default_usize::<DEFAULT_HASH_LEN>" ) ]
189163 pub len : usize ,
190- #[ serde( default = "default_hash_key" ) ]
191164 pub key : Box < str > ,
192- #[ serde( default = "default_hash_personal" ) ]
193165 pub personal : Box < str > ,
194166}
195167
196168impl Default for HashConfig {
197169 fn default ( ) -> Self {
198170 Self {
199171 len : DEFAULT_HASH_LEN ,
200- key : default_hash_key ( ) ,
201- personal : default_hash_personal ( ) ,
172+ key : Box :: from ( admin :: HASH_KEY ) ,
173+ personal : Box :: from ( admin :: HASH_PERSONAL ) ,
202174 }
203175 }
204176}
@@ -214,58 +186,21 @@ pub struct AdminConfig {
214186#[ derive( Clone , Deserialize , Debug ) ]
215187#[ serde( deny_unknown_fields) ]
216188#[ serde( rename_all = "kebab-case" ) ]
189+ #[ serde( default ) ]
217190pub struct StatConfig {
218- #[ serde( default = "default_u32::<0>" ) ]
219191 pub interval : u32 ,
220- #[ serde( default = "default_stats_format" ) ]
221192 pub format : Box < str > ,
222193}
223194
224195impl Default for StatConfig {
225196 fn default ( ) -> Self {
226197 Self {
227198 interval : 0 ,
228- format : default_stats_format ( ) ,
199+ format : Box :: from ( "stats: %s servers, %a add/s, %d del/s, %q query/s, %e error/s" ) ,
229200 }
230201 }
231202}
232203
233- fn default_log_level ( ) -> LevelFilter {
234- LevelFilter :: Info
235- }
236-
237- fn default_server_ip ( ) -> IpAddr {
238- DEFAULT_MASTER_SERVER_IP
239- }
240-
241- fn default_client_version ( ) -> Version {
242- Version :: new ( 0 , 19 )
243- }
244-
245- fn default_server_version ( ) -> Version {
246- Version :: with_patch ( 0 , 19 , 2 )
247- }
248-
249- fn default_client_update_map ( ) -> Box < str > {
250- Box :: from ( "Update please" )
251- }
252-
253- fn default_client_update_title ( ) -> Box < str > {
254- Box :: from ( "https://github.com/FWGS/xash3d-fwgs" )
255- }
256-
257- fn default_hash_key ( ) -> Box < str > {
258- Box :: from ( admin:: HASH_KEY )
259- }
260-
261- fn default_hash_personal ( ) -> Box < str > {
262- Box :: from ( admin:: HASH_PERSONAL )
263- }
264-
265- fn default_stats_format ( ) -> Box < str > {
266- Box :: from ( "stats: %s servers, %a add/s, %d del/s, %q query/s, %e error/s" )
267- }
268-
269204fn deserialize_log_level < ' de , D > ( de : D ) -> Result < LevelFilter , D :: Error >
270205where
271206 D : Deserializer < ' de > ,
0 commit comments