Как преобразовать поток reqwest в поток actix? - PullRequest
0 голосов
/ 07 апреля 2020

Я пытаюсь преобразовать поток из reqwest в поток ответа actix, чтобы избежать создания большого Vec в памяти:

use actix_web::{web, HttpRequest, HttpResponse, Responder};

pub async fn test(
    req: HttpRequest
) -> impl Responder {
    let request = reqwest::get("https://www.rust-lang.org").await;
    if request.is_err() {
        println!("Error: {:?}", request.err());
    }
    let request = request.unwrap();
    let stream = request.bytes_stream();

    HttpResponse::Ok()
        .content_type("text/html")
        .streaming(stream)
}

Компилятор дает мне:

  --> src/routes/test.rs:97:10
   |
97 |         .streaming(stream)
   |          ^^^^^^^^^ the trait `actix_http::error::ResponseError` is not implemented for `reqwest::error::Error`
   |
   = note: required because of the requirements on the impl of `std::convert::From<reqwest::error::Error>` for `actix_http::error::Error`
   = note: required because of the requirements on the impl of `std::convert::Into<actix_http::error::Error>` for `reqwest::error::Error`

Я попробовал все, что мог без удачи:

  • создание сквозного Stream (даже не компилируя, я не очень хорош в преобразовании типов)
  • Реализация отсутствующей ошибки для ошибки Reqwest (эта ошибка не опубликована c, поэтому я не смог этого сделать)
  • все равно пытается (но не уверен, правильно ли я ее использую)
...