【问题标题】:How to return an array of objects queried from external API in Rocket如何在 Rocket 中返回从外部 API 查询的对象数组
【发布时间】:2021-08-24 12:40:08
【问题描述】:

我是 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&lt;Vec&lt;InboundAddress&gt;, reqwest::Error&gt;,说“std::result::Result&lt;std::vec::Vec&lt;InboundAddress&gt;, reqwest::Error&gt; 没有实现特征 rocket::response::Responder&lt;'_&gt;

json 解析正确,从某些地址注销详细信息有效。如何在 Rocket 中返回从外部 API 查询的对象数组?

【问题讨论】:

    标签: rust rust-rocket reqwest


    【解决方案1】:

    关键是将 Vec 包装在 Json 中。

    #[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))
    }
    

    【讨论】:

    • 当我用 Rocket 0.5 尝试这个时,我得到“rocket::response::Responder&lt;'_, '_&gt; 的特征没有为 reqwest::Error 实现”
    猜你喜欢
    • 2014-10-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-25
    • 1970-01-01
    相关资源
    最近更新 更多