Как переслать данные из reqwest :: blocking :: Body в ответчик Rocket? - PullRequest
0 голосов
/ 23 марта 2020

Я могу запросить PNG-файл с reqwest, который я могу сохранить в файл через copy().

Я хочу переслать изображение в качестве ответа Rocket. Я не знаю, как передать туда содержимое ответа.

Я пытался использовать Content(ContentType::PNG, response), но не могу понять, как соответствовать типу, который реализовал черту rocket::response::Responder. Rocket не может использовать тип Bytes, возвращаемый response.bytes().

#![feature(proc_macro_hygiene, decl_macro)]

extern crate reqwest;
#[macro_use]
extern crate rocket;

use anyhow::Result;
use reqwest::header::USER_AGENT;
use reqwest::Response;
use rocket::http::ContentType;
use rocket::response::content::Content;

#[get("/")]
fn myroute() -> Result<Content<String>, anyhow::Error> {
    let client = reqwest::blocking::Client::new();

    let response = client.get("https://www.rust-lang.org/static/images/rust-logo-blk.svg")
        .header(USER_AGENT, "rust-reqwest")
        .send()?;

    Ok(Content(ContentType::PNG, response.bytes()))
}

fn rocket() -> rocket::Rocket {
    rocket::ignite()
        .mount("/", routes![myroute])
}

fn main() {
    rocket().launch();
}
[dependencies]
anyhow = "1.0"
rocket = "0.4.2"
reqwest = { version = "0.10.4", features = ["blocking", "json"] }
...