rust/hg-core/src/config/mod.rs
changeset 50992 58390f59826f
parent 50991 d7b2701f17fa
child 50993 10e57e3f7276
equal deleted inserted replaced
50991:d7b2701f17fa 50992:58390f59826f
   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 }