Сделал кастомную ошибку в виде enum, а функция возвращяет
Result<String, Box<dyn Error>>.
Не знаю как сматчить ошибку, пишет
mismatched types
expected struct `Box<dyn std::error::Error>`
found enum `CacheError`
Код
use std::error::Error;
#[derive(Debug, thiserror::Error)]
pub enum CacheError {
#[error("key not found")]
KeyNotFound,
}
pub struct Cache {
}
impl Cache {
pub fn set(&self, key: &String, value: &String) -> Result<(), Box<dyn Error>>{
Ok(())
}
pub fn get(&self, key: &String) -> Result<String, Box<dyn Error>> {
Err(CacheError::KeyNotFound.into())
}blockquote
}
let cache= cache::Cache{};
let value = match cache.get("somekey".to_string()) {
Ok(v) => v,
Err(cache::CacheError::KeyNotFound) => {
// тут делается запрос к API
},
Err(err) => panic!("{}", err),
};
Или возвращать
Box<dyn Error>
плохая идея, а нужно засовывать другие ошибки внутрь своего кастомного типа?
Много прочитал информации про обработку ошибок и rust-book и статьи и доклады, но пока понятной картины у меня не сложилось.