use super::automation_campaign::{
AutomationCampaignSettingsType, AutomationDelayType, AutomationTrackingOptionsType,
AutomationTriggerType, CampaignReportSummaryType, RecipientType, SocialCardType,
};
use super::automation_email_queue::{
AutomationEmailQueueBuilder, AutomationEmailQueueFilter, AutomationEmailQueueType,
CollectionAutomationEmailQueue,
};
use super::empty::EmptyType;
use super::link::LinkType;
use crate::api::{MailchimpApi, MailchimpApiUpdate};
use crate::internal::error_type::MailchimpErrorType;
use crate::internal::request::MailchimpResult;
use crate::iter::{MalchimpIter, ResourceFilter};
use std::collections::HashMap;
#[derive(Serialize, Deserialize, Debug, Clone)]
pub struct WorkflowEmailType {
#[serde(default, skip_serializing_if = "Option::is_none")]
pub id: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub web_id: Option<u64>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub workflow_id: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub position: Option<u64>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub delay: Option<AutomationDelayType>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub create_time: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub start_time: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub archive_url: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub emails_sent: Option<u64>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub send_time: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub content_type: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub needs_block_refresh: Option<bool>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub has_logo_merge_tag: Option<bool>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub recipients: Option<RecipientType>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub settings: Option<AutomationCampaignSettingsType>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub tracking: Option<AutomationTrackingOptionsType>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub social_card: Option<SocialCardType>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub trigger_settings: Option<AutomationTriggerType>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub report_summary: Option<CampaignReportSummaryType>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub _links: Option<Vec<LinkType>>,
#[serde(skip)]
_api: MailchimpApi,
#[serde(skip)]
_endpoint: String,
}
impl MailchimpApiUpdate for WorkflowEmailType {
fn set_api(&mut self, n_api: &MailchimpApi) {
self._api = n_api.clone()
}
}
impl WorkflowEmailType {
pub fn pause_all_emails(&self) -> Option<MailchimpErrorType> {
let mut b_endpoint = self._endpoint.clone();
b_endpoint.push_str("/actions/pause");
match self
._api
.post::<EmptyType, HashMap<String, String>>(b_endpoint.as_str(), HashMap::new())
{
Ok(_) => None,
Err(e) => Some(e),
}
}
pub fn start_all_emails(&self) -> Option<MailchimpErrorType> {
let mut b_endpoint = self._endpoint.clone();
b_endpoint.push_str("/actions/start");
match self
._api
.post::<EmptyType, HashMap<String, String>>(b_endpoint.as_str(), HashMap::new())
{
Ok(_) => None,
Err(e) => Some(e),
}
}
pub fn delete<'a>(&self) -> Option<MailchimpErrorType> {
let endpoint = self.get_endpoint();
let response = self
._api
.delete::<EmptyType>(endpoint.as_str(), HashMap::new());
match response {
Ok(_) => None,
Err(e) => Some(e),
}
}
pub fn get_email_queue(&self) -> MalchimpIter<AutomationEmailQueueBuilder> {
let mut queue_endpoint = self._endpoint.clone();
queue_endpoint.push_str("/queue");
let filters = AutomationEmailQueueFilter::default();
let payload = filters.build_payload();
let response = self
._api
.get::<CollectionAutomationEmailQueue>(&queue_endpoint, payload);
match response {
Ok(collection) => MalchimpIter {
builder: AutomationEmailQueueBuilder {},
data: collection.queue,
cur_filters: filters.clone(),
cur_it: 0,
total_items: collection.total_items,
api: self._api.clone(),
endpoint: queue_endpoint.clone(),
},
Err(_) => MalchimpIter {
builder: AutomationEmailQueueBuilder {},
data: Vec::new(),
cur_filters: filters.clone(),
cur_it: 0,
total_items: 0,
api: self._api.clone(),
endpoint: queue_endpoint.clone(),
},
}
}
pub fn get_email_queue_info<'a>(
&self,
subscriber_hash: &'a str,
) -> MailchimpResult<AutomationEmailQueueType> {
let mut queue_endpoint = self.get_endpoint().clone();
queue_endpoint.push_str("/queue/");
queue_endpoint.push_str(subscriber_hash);
self._api
.get::<AutomationEmailQueueType>(&queue_endpoint, HashMap::new())
}
pub fn add_subscriber_to_workflow<'a>(
&self,
email_address: &'a str,
) -> MailchimpResult<AutomationEmailQueueType> {
let mut queue_endpoint = self._endpoint.clone();
queue_endpoint.push_str("/queue");
let mut payload = HashMap::new();
payload.insert("email_address".to_string(), email_address.to_string());
self._api
.post::<AutomationEmailQueueType, HashMap<String, String>>(&queue_endpoint, payload)
}
pub fn get_endpoint(&self) -> &String {
&self._endpoint
}
pub fn set_endpoint<'a>(&mut self, n_endpoint: &'a str) {
self._endpoint = n_endpoint.to_string();
}
}
#[derive(Serialize, Deserialize, Debug, Clone)]
pub struct WorkflowEmailsType {
#[serde(default)]
pub emails: Vec<WorkflowEmailType>,
#[serde(default)]
pub total_items: u64,
#[serde(default)]
pub _links: Vec<LinkType>,
}