use crate::internal::api::Api;
use crate::internal::error_type::MailchimpErrorType;
use crate::internal::request::MailchimpRequest;
use crate::types::Ping;
use serde::de::DeserializeOwned;
use serde::ser::Serialize;
use std::collections::HashMap;
use std::rc::Rc;
#[derive(Debug, Clone)]
pub struct MailchimpApi {
i_api: Box<Api<MailchimpRequest>>,
}
impl MailchimpApi {
pub fn new<'a>(api_key: &'a str) -> Self {
let mut creds = api_key.split('-').collect::<Vec<&str>>();
if creds.len() <= 1 {
creds.push("usX");
}
MailchimpApi {
i_api: Box::new(Api::<MailchimpRequest>::new(
creds[1],
creds[0],
Box::new(MailchimpRequest::new()),
)),
}
}
pub fn domain(&self) -> String {
self.i_api.domain()
}
pub fn version(&self) -> String {
self.i_api.api_version()
}
pub fn post<'a, T, P>(&self, endpoint: &'a str, payload: P) -> Result<T, MailchimpErrorType>
where
T: DeserializeOwned,
P: Serialize,
{
self.i_api.post_edge::<T, P>(endpoint, payload)
}
pub fn patch<'a, T, P>(&self, endpoint: &'a str, payload: P) -> Result<T, MailchimpErrorType>
where
T: DeserializeOwned,
P: Serialize,
{
self.i_api.patch_edge::<T, P>(endpoint, payload)
}
pub fn put<'a, T, P>(&self, endpoint: &'a str, payload: P) -> Result<T, MailchimpErrorType>
where
T: DeserializeOwned,
P: Serialize,
{
self.i_api.put_edge::<T, P>(endpoint, payload)
}
pub fn get<'a, T>(
&self,
endpoint: &'a str,
payload: HashMap<String, String>,
) -> Result<T, MailchimpErrorType>
where
T: DeserializeOwned,
{
self.i_api.get_edge(endpoint, payload)
}
pub fn delete<'a, T>(
&self,
endpoint: &'a str,
payload: HashMap<String, String>,
) -> Result<T, MailchimpErrorType>
where
T: DeserializeOwned,
{
self.i_api.delete_edge(endpoint, payload)
}
pub fn ping(&self) -> Result<Ping, MailchimpErrorType> {
self.get::<Ping>("ping", HashMap::new())
}
}
impl Default for MailchimpApi {
fn default() -> Self {
MailchimpApi {
i_api: Box::new(Api::<MailchimpRequest>::new(
"",
"",
Box::new(MailchimpRequest::new()),
)),
}
}
}
pub trait MailchimpApiUpdate {
fn set_api(&mut self, api: Rc<MailchimpApi>);
}