use std::{num::NonZero, time::Duration};
use crate::shared::rest::lnm::rate_limit::RateLimiterConfig;
#[derive(Clone, Debug)]
pub struct RestClientConfig {
timeout: Duration,
rate_limiter_active: bool,
rate_limit_auth_requests_per_second: u32,
rate_limit_unauth_requests_per_second: u32,
}
impl RestClientConfig {
pub fn new(timeout: Duration) -> Self {
Self {
timeout,
rate_limiter_active: false,
..Default::default()
}
}
pub fn with_rate_limiter(
timeout: Duration,
rate_limit_auth_rps: NonZero<u32>,
rate_limit_unauth_rps: NonZero<u32>,
) -> Self {
Self {
timeout,
rate_limiter_active: true,
rate_limit_auth_requests_per_second: rate_limit_auth_rps.get(),
rate_limit_unauth_requests_per_second: rate_limit_unauth_rps.get(),
}
}
pub fn timeout(&self) -> Duration {
self.timeout
}
pub fn rate_limiter_active(&self) -> bool {
self.rate_limiter_active
}
pub fn rate_limit_auth_requests_per_second(&self) -> u32 {
self.rate_limit_auth_requests_per_second
}
pub fn rate_limit_unauth_requests_per_second(&self) -> u32 {
self.rate_limit_unauth_requests_per_second
}
pub fn with_timeout(mut self, timeout: Duration) -> Self {
self.timeout = timeout;
self
}
pub fn with_rate_limiter_active(mut self, active: bool) -> Self {
self.rate_limiter_active = active;
self
}
pub fn with_rate_limit_auth_requests_per_second(mut self, rps: NonZero<u32>) -> Self {
self.rate_limit_auth_requests_per_second = rps.get();
self
}
pub fn with_rate_limit_unauth_requests_per_second(mut self, rps: NonZero<u32>) -> Self {
self.rate_limit_unauth_requests_per_second = rps.get();
self
}
}
impl RateLimiterConfig for RestClientConfig {
fn rate_limit_auth_interval(&self) -> Duration {
Duration::from_secs(1) / self.rate_limit_auth_requests_per_second
}
fn rate_limit_unauth_interval(&self) -> Duration {
Duration::from_secs(1) / self.rate_limit_unauth_requests_per_second
}
}
impl Default for RestClientConfig {
fn default() -> Self {
Self {
timeout: Duration::from_secs(20),
rate_limiter_active: true,
rate_limit_auth_requests_per_second: 5,
rate_limit_unauth_requests_per_second: 1,
}
}
}