в расте года придумали что-то получше? Вкратце, фатальные ошибки в отдельный enum, локальные - в отдельный. Фатальные "бросаем" через try ?, локальные обрабатываем:
fn compare_and_swap(
&mut self,
key: Key,
old_value: Value,
new_value: Value
) -> Result<Result<(), CompareAndSwapError>, sled::Error>
let cas_result = sled.compare_and_swap( "dogs", "pickles", "catfood")?;
if let Err(cas_error) = cas_result {
// handle expected issue
}
Из этой статьи
https://sled.rs/errors.html
Обычно ошибки объеденяют через новый енам с помощью какого-нибудь snafu или thiserror. Выглядит не оч и такое весьма редко можно встретить. Это то, что касается возвращаемого типа. А так обработка некоторых ошибок внутри функции в целом ок, ничего плохого в этом нет.
Обсуждают сегодня