mod broadcasts;
mod contacts;
mod emails;
mod error;
mod http;
mod segments;
mod topics;
mod types;
use std::sync::Arc;
use http::Config;
pub use broadcasts::Broadcasts;
pub use contacts::{ContactTopics, Contacts};
pub use emails::{Batch, Emails};
pub use error::{ApiError, Error, Result};
pub use segments::Segments;
pub use topics::Topics;
pub use types::*;
const DEFAULT_BASE_URL: &str = "http://localhost:3001";
#[derive(Clone)]
pub struct MillionSend {
pub emails: Emails,
pub batch: Batch,
pub contacts: Contacts,
pub topics: Topics,
pub broadcasts: Broadcasts,
pub segments: Segments,
}
impl MillionSend {
pub fn new(api_key: impl Into<String>) -> Self {
let base_url =
std::env::var("MILLIONSEND_BASE_URL").unwrap_or_else(|_| DEFAULT_BASE_URL.to_string());
Self::build(api_key.into(), base_url)
}
pub fn with_base_url(api_key: impl Into<String>, base_url: impl Into<String>) -> Self {
Self::build(api_key.into(), base_url.into())
}
pub fn from_env() -> Result<Self> {
let api_key = std::env::var("MILLIONSEND_API_KEY").map_err(|_| {
Error::Api(ApiError {
status_code: None,
name: "missing_api_key".to_string(),
message: "Set MILLIONSEND_API_KEY or use MillionSend::new(api_key).".to_string(),
})
})?;
Ok(Self::new(api_key))
}
fn build(api_key: String, base_url: String) -> Self {
let config = Arc::new(Config::new(api_key, base_url));
MillionSend {
emails: Emails(config.clone()),
batch: Batch(config.clone()),
contacts: Contacts::new(config.clone()),
topics: Topics(config.clone()),
broadcasts: Broadcasts(config.clone()),
segments: Segments(config),
}
}
}