问题描述
我是 Rust 的新手,想用一些简单的东西来测试一下。该代码基本上查询外部 API 并返回响应。在这种情况下,响应是一个对象数组。
#![feature(proc_macro_hygiene,decl_macro)]
#[macro_use] extern crate rocket;
extern crate serde;
extern crate serde_json;
#[derive(Deserialize,Debug)]
struct InboundAddress {
chain: String,pub_key: String,address: String,halted: bool,gas_rate: String,}
#[get("/addresses")]
fn addresses() -> Result<Vec<InboundAddress>,reqwest::Error> {
let url = "https://midgard.thorchain.info/v2/thorchain/inbound_addresses";
let addresses: Vec<InboundAddress> = reqwest::blocking::get(url)?.json()?;
println!("First address chain is: {}",addresses[0].chain);
Ok(addresses)
}
fn main() {
rocket::ignite().mount("/",routes![addresses]).launch();
}
错误来自我试图返回的内容,Result<Vec<InboundAddress>,reqwest::Error>
,说“特征 rocket::response::Responder<'_>
没有为 std::result::Result<std::vec::Vec<InboundAddress>,reqwest::Error>
实现”
json 解析正确,从一些地址工作中注销详细信息。如何返回从 Rocket 中的外部 API 查询的对象数组?
解决方法
关键是用 Json 包装 Vec。
#[get("/addresses")]
fn addresses() -> Result<Json<Vec<InboundAddress>>,reqwest::Error> {
let url = "https://testnet.midgard.thorchain.info/v2/thorchain/inbound_addresses";
let addresses: Vec<InboundAddress> = reqwest::blocking::get(url)?.json()?;
Ok(Json(addresses))
}