Мне интересно, как я могу выполнить некоторое сопоставление шаблонов с моими пользовательскими ошибками, чтобы иметь особое c поведение для некоторых ошибок и общее c поведение для остальных.
I иметь следующую настраиваемую ошибку, определенную с помощью thiserror
, поскольку это, по-видимому, последний рекомендуемый ящик для настраиваемых ошибок в июле 2020 года.
#[derive(thiserror::Error, Debug)]
pub enum MyError{
#[error("Error while building the query")]
Builder(#[source] hyper::http::Error),
#[error("Generic error")]
Fuck,
#[error("Not OK HTTP response code")]
NotOK,
#[error("Request error")]
Request(#[source] hyper::Error),
}
pub async fn do_http_stuff() -> Result<Vec<u8>, MyError> {
...
}
И:
match do_http_stuff().await {
Ok(data) => ...,
Err(error) => match error.kind() {
MyError::NotOK => {
println!("not ok");
},
_ => {
println!("{}", error.to_string());
},
},
},
Но .kind()
не реализован. Когда я ищу, как управлять ошибками в ржавчине, в примерах часто бывает доброта. Какие заклинания мне нужно сделать, чтобы в моем проекте был этот .kind()
метод или что-то подобное?
Спасибо.