use std::time::Duration;
use crate::error::Result;
use crate::http::HttpTransport;
use crate::resources::{Contacts, Domains, Emails, Suppressions, Templates, Webhooks};
const DEFAULT_TIMEOUT_SECS: u64 = 30;
const DEFAULT_MAX_RETRIES: u32 = 3;
#[derive(Debug, Clone)]
pub struct AxeneBuilder {
api_key: String,
base_url: Option<String>,
max_retries: u32,
timeout: Duration,
}
impl AxeneBuilder {
pub fn base_url(mut self, base_url: impl Into<String>) -> Self {
self.base_url = Some(base_url.into());
self
}
pub fn max_retries(mut self, max_retries: u32) -> Self {
self.max_retries = max_retries;
self
}
pub fn timeout(mut self, timeout: Duration) -> Self {
self.timeout = timeout;
self
}
pub fn build(self) -> Result<Axene> {
let http = HttpTransport::new(self.api_key, self.base_url, self.max_retries, self.timeout)?;
Ok(Axene {
emails: Emails::new(http.clone()),
domains: Domains::new(http.clone()),
contacts: Contacts::new(http.clone()),
suppressions: Suppressions::new(http.clone()),
templates: Templates::new(http.clone()),
webhooks: Webhooks::new(http),
})
}
}
#[derive(Debug, Clone)]
pub struct Axene {
emails: Emails,
domains: Domains,
contacts: Contacts,
suppressions: Suppressions,
templates: Templates,
webhooks: Webhooks,
}
impl Axene {
pub fn new(api_key: impl Into<String>) -> Result<Self> {
Self::builder(api_key).build()
}
pub fn builder(api_key: impl Into<String>) -> AxeneBuilder {
AxeneBuilder {
api_key: api_key.into(),
base_url: None,
max_retries: DEFAULT_MAX_RETRIES,
timeout: Duration::from_secs(DEFAULT_TIMEOUT_SECS),
}
}
pub fn emails(&self) -> &Emails {
&self.emails
}
pub fn domains(&self) -> &Domains {
&self.domains
}
pub fn contacts(&self) -> &Contacts {
&self.contacts
}
pub fn suppressions(&self) -> &Suppressions {
&self.suppressions
}
pub fn templates(&self) -> &Templates {
&self.templates
}
pub fn webhooks(&self) -> &Webhooks {
&self.webhooks
}
}