@@ -126,30 +126,32 @@ impl<L: LogLevel> Verbosity<L> {
126
126
self . log_level ( ) . is_none ( )
127
127
}
128
128
129
- fn verbosity ( & self ) -> i8 {
130
- level_value ( L :: default ( ) ) - ( self . quiet as i8 ) + ( self . verbose as i8 )
129
+ fn verbosity ( & self ) -> u8 {
130
+ let default_verbosity = level_value ( L :: default ( ) ) ;
131
+ let verbosity = default_verbosity as i16 - self . quiet as i16 + self . verbose as i16 ;
132
+ verbosity. clamp ( 0 , u8:: MAX as i16 ) as u8
131
133
}
132
134
}
133
135
134
- fn level_value ( level : Option < Level > ) -> i8 {
136
+ fn level_value ( level : Option < Level > ) -> u8 {
135
137
match level {
136
- None => - 1 ,
137
- Some ( Level :: Error ) => 0 ,
138
- Some ( Level :: Warn ) => 1 ,
139
- Some ( Level :: Info ) => 2 ,
140
- Some ( Level :: Debug ) => 3 ,
141
- Some ( Level :: Trace ) => 4 ,
138
+ None => 0 ,
139
+ Some ( Level :: Error ) => 1 ,
140
+ Some ( Level :: Warn ) => 2 ,
141
+ Some ( Level :: Info ) => 3 ,
142
+ Some ( Level :: Debug ) => 4 ,
143
+ Some ( Level :: Trace ) => 5 ,
142
144
}
143
145
}
144
146
145
- fn level_enum ( verbosity : i8 ) -> Option < Level > {
147
+ fn level_enum ( verbosity : u8 ) -> Option < Level > {
146
148
match verbosity {
147
- i8 :: MIN ..=- 1 => None ,
148
- 0 => Some ( Level :: Error ) ,
149
- 1 => Some ( Level :: Warn ) ,
150
- 2 => Some ( Level :: Info ) ,
151
- 3 => Some ( Level :: Debug ) ,
152
- 4 ..=i8 :: MAX => Some ( Level :: Trace ) ,
149
+ 0 => None ,
150
+ 1 => Some ( Level :: Error ) ,
151
+ 2 => Some ( Level :: Warn ) ,
152
+ 3 => Some ( Level :: Info ) ,
153
+ 4 => Some ( Level :: Debug ) ,
154
+ 5 ..=u8 :: MAX => Some ( Level :: Trace ) ,
153
155
}
154
156
}
155
157
@@ -246,8 +248,10 @@ mod test {
246
248
( 3 , 0 , Some ( Level :: Debug ) , LevelFilter :: Debug ) ,
247
249
( 4 , 0 , Some ( Level :: Trace ) , LevelFilter :: Trace ) ,
248
250
( 5 , 0 , Some ( Level :: Trace ) , LevelFilter :: Trace ) ,
251
+ ( 255 , 0 , Some ( Level :: Trace ) , LevelFilter :: Trace ) ,
249
252
( 0 , 1 , None , LevelFilter :: Off ) ,
250
253
( 0 , 2 , None , LevelFilter :: Off ) ,
254
+ ( 0 , 255 , None , LevelFilter :: Off ) ,
251
255
( 255 , 255 , Some ( Level :: Error ) , LevelFilter :: Error ) ,
252
256
] ;
253
257
@@ -266,18 +270,6 @@ mod test {
266
270
}
267
271
}
268
272
269
- /// These are characterization tests that show the current behavior
270
- #[ test]
271
- fn verbosity_error_level_max_incorrect ( ) {
272
- let v: Verbosity < ErrorLevel > = Verbosity :: new ( 255 , 0 ) ;
273
- assert_eq ! ( v. log_level( ) , None ) ; // Should be Some(Level::Trace)
274
- assert_eq ! ( v. log_level_filter( ) , LevelFilter :: Off ) ; // Should be LevelFilter::Trace
275
-
276
- let v: Verbosity < ErrorLevel > = Verbosity :: new ( 0 , 255 ) ;
277
- assert_eq ! ( v. log_level( ) , Some ( Level :: Warn ) ) ; // Should be None
278
- assert_eq ! ( v. log_level_filter( ) , LevelFilter :: Warn ) ; // Should be LevelFilter::Off
279
- }
280
-
281
273
#[ test]
282
274
fn verbosity_warn_level ( ) {
283
275
let tests = [
@@ -287,9 +279,11 @@ mod test {
287
279
( 2 , 0 , Some ( Level :: Debug ) , LevelFilter :: Debug ) ,
288
280
( 3 , 0 , Some ( Level :: Trace ) , LevelFilter :: Trace ) ,
289
281
( 4 , 0 , Some ( Level :: Trace ) , LevelFilter :: Trace ) ,
282
+ ( 255 , 0 , Some ( Level :: Trace ) , LevelFilter :: Trace ) ,
290
283
( 0 , 1 , Some ( Level :: Error ) , LevelFilter :: Error ) ,
291
284
( 0 , 2 , None , LevelFilter :: Off ) ,
292
285
( 0 , 3 , None , LevelFilter :: Off ) ,
286
+ ( 0 , 255 , None , LevelFilter :: Off ) ,
293
287
( 255 , 255 , Some ( Level :: Warn ) , LevelFilter :: Warn ) ,
294
288
] ;
295
289
@@ -308,18 +302,6 @@ mod test {
308
302
}
309
303
}
310
304
311
- /// These are characterization tests that show the current behavior
312
- #[ test]
313
- fn verbosity_warn_level_max_incorrect ( ) {
314
- let v: Verbosity < WarnLevel > = Verbosity :: new ( 255 , 0 ) ;
315
- assert_eq ! ( v. log_level( ) , Some ( Level :: Error ) ) ; // Should be Some(Level::Trace)
316
- assert_eq ! ( v. log_level_filter( ) , LevelFilter :: Error ) ; // Should be LevelFilter::Trace
317
-
318
- let v: Verbosity < WarnLevel > = Verbosity :: new ( 0 , 255 ) ;
319
- assert_eq ! ( v. log_level( ) , Some ( Level :: Info ) ) ; // Should be None
320
- assert_eq ! ( v. log_level_filter( ) , LevelFilter :: Info ) ; // Should be LevelFilter::Off
321
- }
322
-
323
305
#[ test]
324
306
fn verbosity_info_level ( ) {
325
307
let tests = [
@@ -328,10 +310,12 @@ mod test {
328
310
( 1 , 0 , Some ( Level :: Debug ) , LevelFilter :: Debug ) ,
329
311
( 2 , 0 , Some ( Level :: Trace ) , LevelFilter :: Trace ) ,
330
312
( 3 , 0 , Some ( Level :: Trace ) , LevelFilter :: Trace ) ,
313
+ ( 255 , 0 , Some ( Level :: Trace ) , LevelFilter :: Trace ) ,
331
314
( 0 , 1 , Some ( Level :: Warn ) , LevelFilter :: Warn ) ,
332
315
( 0 , 2 , Some ( Level :: Error ) , LevelFilter :: Error ) ,
333
316
( 0 , 3 , None , LevelFilter :: Off ) ,
334
317
( 0 , 4 , None , LevelFilter :: Off ) ,
318
+ ( 0 , 255 , None , LevelFilter :: Off ) ,
335
319
( 255 , 255 , Some ( Level :: Info ) , LevelFilter :: Info ) ,
336
320
] ;
337
321
@@ -349,16 +333,4 @@ mod test {
349
333
) ;
350
334
}
351
335
}
352
-
353
- /// These are characterization tests that show the current behavior
354
- #[ test]
355
- fn verbosity_info_level_max_incorrect ( ) {
356
- let v: Verbosity < InfoLevel > = Verbosity :: new ( 255 , 0 ) ;
357
- assert_eq ! ( v. log_level( ) , Some ( Level :: Warn ) ) ; // Should be Some(Level::Trace)
358
- assert_eq ! ( v. log_level_filter( ) , LevelFilter :: Warn ) ; // Should be LevelFilter::Trace
359
-
360
- let v: Verbosity < InfoLevel > = Verbosity :: new ( 0 , 255 ) ;
361
- assert_eq ! ( v. log_level( ) , Some ( Level :: Debug ) ) ; // Should be None
362
- assert_eq ! ( v. log_level_filter( ) , LevelFilter :: Debug ) ; // Should be LevelFilter::Off
363
- }
364
336
}
0 commit comments