use usesend_api::UseSendApiClient;
use crate::{Campaigns, ContactBooks, Contacts, Domains, Emails};
#[derive(Clone)]
pub struct UseSend {
pub domains: Domains,
pub emails: Emails,
pub contact_books: ContactBooks,
pub contacts: Contacts,
pub campaigns: Campaigns,
}
impl UseSend {
pub fn new(api_key: impl Into<String>) -> Self {
Self::from_api_client(UseSendApiClient::new(api_key))
}
pub fn with_base_url(api_key: impl Into<String>, base_url: impl Into<String>) -> Self {
Self::from_api_client(UseSendApiClient::with_base_url(api_key, base_url))
}
pub fn with_client(api_key: impl Into<String>, client: reqwest::Client) -> Self {
Self::from_api_client(UseSendApiClient::with_client(api_key, client))
}
pub fn from_api_client(api: UseSendApiClient) -> Self {
Self {
domains: Domains(api.domains),
emails: Emails(api.emails),
contact_books: ContactBooks(api.contact_books),
contacts: Contacts(api.contacts),
campaigns: Campaigns(api.campaigns),
}
}
pub fn from_env() -> Self {
let key =
std::env::var("USESEND_API_KEY").expect("USESEND_API_KEY environment variable not set");
Self::new(key)
}
}
impl Default for UseSend {
fn default() -> Self {
Self::from_env()
}
}