Util to get sometimes-empty config property

The get_property function needs to say that there is no property so that
the caller can respond appropriately. I'm going to need to frequently
respond to the "no such property" path by treating it as *not* an error.

If the config file doesn't specify a property, that's not an error, it's
just not specified and the default should be used instead. This util fn
makes that a bit more ergonomic.
This commit is contained in:
2025-07-17 09:59:52 -05:00
parent 30d8bcc6de
commit d27bea2c43

View File

@@ -35,6 +35,23 @@ fn get_table<'outer>(outer: &'outer Table, table_name: impl ToString) -> Result<
.ok_or(Error::BadFormat)?) .ok_or(Error::BadFormat)?)
} }
/// Similar to `get_property()` but maps the "Error::NoSuchProperty" result to
/// Option::None. Some properties aren't specified, and that's okay... sometimes.
fn get_maybe_property<'outer> (outer: &'outer Table, property: impl ToString) -> Result<Option<&'outer String>> {
let maybe_prop = get_property(outer, property);
match maybe_prop {
Ok(value) => Ok(Some(value)),
Err(e) => {
if let Error::NoSuchProperty = e {
return Ok(None);
} else {
return Err(e);
}
}
}
}
/// The config properties are individual strings. This gets the named property, /// The config properties are individual strings. This gets the named property,
/// or an error explaining why it couldn't be fetched. /// or an error explaining why it couldn't be fetched.
fn get_property<'outer>(outer: &'outer Table, property: impl ToString) -> Result<&'outer String> { fn get_property<'outer>(outer: &'outer Table, property: impl ToString) -> Result<&'outer String> {