Как я могу использовать Hyper-клиент из функции gRPC? - PullRequest
0 голосов
/ 12 июня 2019

У меня есть сервер gRPC, и мне нужно сделать HTTP GET. Я изо всех сил пытаюсь получить фьючерсы прямо в звонках.

Я пытаюсь это

fn current(
    &self,
    _: ::grpc::RequestOptions,
    p: quote::CurrentRequest,
) -> ::grpc::SingleResponse<quote::CurrentResponse> {
    let symbol = p.get_symbol();

    let client = Client::new();
    let fut: grpc::GrpcFuture<quote::CurrentResponse> = Box::new(
        client
            .get(Uri::from_static(AlphaFunction::base_url()))
            .and_then(|res| res.into_body().concat2())
            .and_then(|body| {
                info!("body {:?}", body);
                let mut r = quote::CurrentResponse::new();
                // TODO: Parse body
                r.set_symbol(symbol.to_string());
                Ok(r)
            })
            .map_err(|e| e),
    );

    grpc::SingleResponse::new(fut)
}

Но я получаю кучу ошибок:

expected struct `hyper::error::Error`, found enum `grpc::error::Error`

и

    77 |         grpc::SingleResponse::new(fut)
       |         ^^^^^^^^^^^^^^^^^^^^^^^^^ expected struct `protos::quote::CurrentResponse`, found tuple

1 Ответ

0 голосов
/ 12 июня 2019

Я понял это:

let fut = client
    .get(Uri::from_static(AlphaFunction::base_url()))
    .and_then(|res| res.into_body().concat2())
    .and_then(move |body| {
        info!("body {:?}", body);
        let mut r = quote::CurrentResponse::new();
        r.set_symbol(symbol.to_string());
        Ok(r)
    })
    .map_err(|e| grpc::Error::Panic(format!("{}", e)));
...