equal
deleted
inserted
replaced
420 None => { |
420 None => { |
421 if !fallback_to_default { |
421 if !fallback_to_default { |
422 return Ok(None); |
422 return Ok(None); |
423 } |
423 } |
424 match self.get_default(section, item)? { |
424 match self.get_default(section, item)? { |
425 Some(default) => Ok(default.try_into()?), |
425 Some(default) => { |
|
426 // Defaults are TOML values, so they're not in the same |
|
427 // shape as in the config files. |
|
428 // First try to convert directly to the expected type |
|
429 let as_t = default.try_into(); |
|
430 match as_t { |
|
431 Ok(t) => Ok(t), |
|
432 Err(e) => { |
|
433 // If it fails, it means that... |
|
434 let as_bytes: Result<Option<&[u8]>, _> = |
|
435 default.try_into(); |
|
436 match as_bytes { |
|
437 Ok(bytes_opt) => { |
|
438 if let Some(bytes) = bytes_opt { |
|
439 // ...we should be able to parse it |
|
440 return Ok(parse(bytes)); |
|
441 } |
|
442 Err(e) |
|
443 } |
|
444 Err(_) => Err(e), |
|
445 } |
|
446 } |
|
447 } |
|
448 } |
426 None => { |
449 None => { |
427 self.print_devel_warning(section, item)?; |
450 self.print_devel_warning(section, item)?; |
428 Ok(None) |
451 Ok(None) |
429 } |
452 } |
430 } |
453 } |
777 #[test] |
800 #[test] |
778 fn test_default_parse() { |
801 fn test_default_parse() { |
779 let config = Config::load_from_explicit_sources(vec![]) |
802 let config = Config::load_from_explicit_sources(vec![]) |
780 .expect("expected valid config"); |
803 .expect("expected valid config"); |
781 let ret = config.get_byte_size(b"cmdserver", b"max-log-size"); |
804 let ret = config.get_byte_size(b"cmdserver", b"max-log-size"); |
782 // FIXME should be `is_ok` |
805 assert!(ret.is_ok(), "{:?}", ret); |
783 assert!(ret.is_err(), "{:?}", ret); |
|
784 } |
806 } |
785 } |
807 } |