Skip to main content

query

Function query 

pub async fn query<T>(
    timeout: Duration,
    fut: impl Future<Output = Result<Response<T>, Status>>,
) -> Result<T, Error>
Expand description

Read-only unary call: transport trouble and timeouts are retryable errors.

Waits for fut at most timeout, then maps a gRPC failure with map_status.

§Errors

  • [Error::Transport] when the deadline passes, or for a transport status such as Unavailable.
  • [Error::RateLimited], [Error::Rejected] and [Error::Config] for the matching statuses, see map_status.

§Examples

use std::time::Duration;
use brokapi_core::Error;
use brokapi_tbank::util::query;
use tonic::{Response, Status};

let ok = query(Duration::from_secs(1), async { Ok::<_, Status>(Response::new(42)) }).await;
assert_eq!(ok.unwrap(), 42);

let slow = query(Duration::from_millis(10), async {
    tokio::time::sleep(Duration::from_secs(5)).await;
    Ok::<_, Status>(Response::new(0))
})
.await;
assert!(matches!(slow, Err(Error::Transport(_))));