use super::error_to_backoff; use crate::types::alpaca::api::incoming::clock::Clock; use backoff::{future::retry_notify, ExponentialBackoff}; use governor::DefaultDirectRateLimiter; use log::warn; use reqwest::{Client, Error}; use std::time::Duration; pub async fn get( client: &Client, rate_limiter: &DefaultDirectRateLimiter, backoff: Option, api_base: &str, ) -> Result { retry_notify( backoff.unwrap_or_default(), || async { rate_limiter.until_ready().await; client .get(&format!("https://{}.alpaca.markets/v2/clock", api_base)) .send() .await .map_err(error_to_backoff)? .error_for_status() .map_err(error_to_backoff)? .json::() .await .map_err(error_to_backoff) }, |e, duration: Duration| { warn!( "Failed to get clock, will retry in {} seconds: {}.", duration.as_secs(), e ); }, ) .await }