Я хочу узнать, как правильно бороться с ошибками в Rust. Я прочитал книгу и этот пример; Теперь я хотел бы знать, как мне следует устранять ошибки в этой функции:
fn get_synch_point(&self) -> Result<pv::synch::MeasPeriods, reqwest::Error> {
let url = self.root.join("/term/pv/synch"); // self.root is url::Url
let url = match url {
Ok(url) => url,
// ** this err here is url::ParseError and can be converted to Error::Kind https://docs.rs/reqwest/0.8.3/src/reqwest/error.rs.html#54-57 **//
Err(err) => {
return Err(Error {
kind: ::std::convert::From::from(err),
url: url.ok(),
})
}
};
Ok(reqwest::get(url)?.json()?) //this return reqwest::Error or convert to pv::sych::MeasPeriods automaticly
}
этот код неправильный; это вызывает ошибку компиляции:
error[E0451]: field 'kind' of struct 'reqwest::Error' is private
--> src/main.rs:34:42
|
34 | Err(err) => return Err(Error{kind: ::std::convert::From::from(err), url: url.ok()})
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ field 'kind' is private
error[E0451]: field 'url' of struct 'reqwest::Error' is private
--> src/main.rs:34:81
|
34 | Err(err) => return Err(Error{kind: ::std::convert::From::from(err), url: url.ok()})
| ^^^^^^^^^^^^^ field 'url' is private
Каков правильный порядок действий в этом случае? Для меня reqwest::Error
в данном случае является хорошим решением, поэтому я бы хотел избежать определения собственного типа ошибки:
enum MyError {
Request(reqwest::Error),
Url(url::ParseError) // this already a part of request::Error::Kind!!!
}