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_minute: u32,
rate_limit_unauth_requests_per_minute: u32,
}
impl RestClientConfig {
pub fn new(timeout: Duration) -> Self {
Self {
timeout,
..Default::default()
}
}
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_minute(&self) -> u32 {
self.rate_limit_auth_requests_per_minute
}
pub fn rate_limit_unauth_requests_per_minute(&self) -> u32 {
self.rate_limit_unauth_requests_per_minute
}
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_minute(mut self, rpm: NonZero<u32>) -> Self {
self.rate_limit_auth_requests_per_minute = rpm.get();
self
}
pub fn with_rate_limit_unauth_requests_per_minute(mut self, rpm: NonZero<u32>) -> Self {
self.rate_limit_unauth_requests_per_minute = rpm.get();
self
}
}
impl RateLimiterConfig for RestClientConfig {
fn rate_limit_auth_interval(&self) -> Duration {
Duration::from_secs(60) / self.rate_limit_auth_requests_per_minute
}
fn rate_limit_unauth_interval(&self) -> Duration {
Duration::from_secs(60) / self.rate_limit_unauth_requests_per_minute
}
}
impl Default for RestClientConfig {
fn default() -> Self {
Self {
timeout: Duration::from_secs(20),
rate_limiter_active: true,
rate_limit_auth_requests_per_minute: 60,
rate_limit_unauth_requests_per_minute: 30,
}
}
}