use std::time::Duration;
use secrecy::SecretString;
use crate::provider::ProviderId;
pub const DEFAULT_TIMEOUT: Duration = Duration::from_secs(60);
pub const DEFAULT_CONNECT_TIMEOUT: Duration = Duration::from_secs(10);
#[derive(Debug, Clone)]
pub struct ProviderHttpConfig {
pub id: ProviderId,
pub base_url: String,
pub api_key: Option<SecretString>,
pub organization: Option<String>,
pub timeout: Duration,
pub connect_timeout: Duration,
pub max_retries: usize,
}
impl ProviderHttpConfig {
#[must_use]
pub fn new(id: ProviderId, base_url: impl Into<String>) -> Self {
Self {
id,
base_url: base_url.into(),
api_key: None,
organization: None,
timeout: DEFAULT_TIMEOUT,
connect_timeout: DEFAULT_CONNECT_TIMEOUT,
max_retries: 2,
}
}
#[must_use]
pub fn with_api_key(mut self, api_key: SecretString) -> Self {
self.api_key = Some(api_key);
self
}
#[must_use]
pub fn with_organization(mut self, organization: impl Into<String>) -> Self {
self.organization = Some(organization.into());
self
}
#[must_use]
pub fn with_timeouts(mut self, timeout: Duration, connect_timeout: Duration) -> Self {
self.timeout = timeout;
self.connect_timeout = connect_timeout;
self
}
#[must_use]
pub fn with_max_retries(mut self, max_retries: usize) -> Self {
self.max_retries = max_retries;
self
}
}