Chr*_*oph 3 error-handling rust
我想编写一个get_members从GitHub团队返回成员的函数.
pub fn get_members(group_id: &str) -> Result<Vec<User>, Error> {
let client = Client::new();
let query = format!("https://api.github.com/teams/{}/members?access_token={}",
group_id,
config::get_env(config::ENV_TOKEN));
println!("{}", query);
let mut res = try!(client
.get(&query)
.header(UserAgent("my/app".to_owned()))
.send());
let mut body = String::new();
try!(res.read_to_string(&mut body));
try!(json::decode(&body));
}
Run Code Online (Sandbox Code Playgroud)
有两种不同类型的错误可供使用.一个是hyper::error::Error另一个是rustc_serialize::json::DecoderError.
我以为我可以使用工具From<::hyper::error::Error> for Error和From<rustc_serialize::json::DecoderError>.但由于io::Error我的箱子中没有其他两个错误也没有,我不允许遵循这种方法.
我想知道去这里的方式是什么.我是否需要提出自己的AppError类型然后From<>为此实现特征?这是要走的路吗?
通常是的,使用您自己的错误类型是要走的路.甚至有几个箱子(我现在只能找到这个箱子)可以帮助你拆除样板.在编写库时,也应该使用此方法,而不是应用程序.
但是,有一个选项可以使用Box<Error>特征对象作为错误类型.Rust和第三方库中的大量错误类型实现了这一特性; 因此,使用Result<..., Box<Error>>返回类型应该几乎总能工作.
| 归档时间: |
|
| 查看次数: |
342 次 |
| 最近记录: |