use super::empty::EmptyType;
use super::link::LinkType;
use crate::api::MailchimpApi;
use crate::internal::request::MailchimpResult;
use crate::iter::{BuildIter, MailchimpCollection, SimpleFilter};
use serde::{Deserialize, Serialize};
use std::collections::HashMap;
use std::rc::Rc;
#[derive(Serialize, Deserialize, Debug, Clone)]
pub struct CampaignFeedbackType {
#[serde(default)]
pub feedback_id: u64,
#[serde(default)]
pub parent_id: u64,
#[serde(default)]
pub block_id: u64,
#[serde(default)]
pub message: String,
#[serde(default)]
pub is_complete: bool,
#[serde(default)]
pub created_by: String,
#[serde(default)]
pub created_at: String,
#[serde(default)]
pub updated_at: String,
#[serde(default)]
pub source: String,
#[serde(default)]
pub campaign_id: String,
#[serde(default)]
pub _links: Vec<LinkType>,
#[serde(skip)]
_api: Rc<MailchimpApi>,
#[serde(skip)]
_endpoint: String,
}
#[derive(Serialize, Deserialize, Debug, Clone)]
pub struct CollectionCampaignFeedback {
#[serde(default)]
pub feedback: Vec<CampaignFeedbackType>,
#[serde(default)]
pub campaign_id: String,
#[serde(default)]
pub total_items: u64,
#[serde(default)]
pub _links: Vec<LinkType>,
}
impl MailchimpCollection<CampaignFeedbackType> for CollectionCampaignFeedback {
fn get_total_items(&self) -> u64 {
self.total_items
}
fn get_values(&self) -> Vec<CampaignFeedbackType> {
self.feedback.clone()
}
}
impl Default for CollectionCampaignFeedback {
fn default() -> Self {
CollectionCampaignFeedback {
feedback: Vec::new(),
campaign_id: String::new(),
total_items: 0,
_links: Vec::new(),
}
}
}
#[derive(Debug)]
pub struct CampaignFeedbackBuilder {
pub endpoint: String,
}
impl BuildIter for CampaignFeedbackBuilder {
type Item = CampaignFeedbackType;
type FilterItem = SimpleFilter;
type Collection = CollectionCampaignFeedback;
fn update_item(&self, data: &Self::Item, api: Rc<MailchimpApi>) -> Self::Item {
let mut in_data = data.clone();
in_data.set_api(api);
in_data.set_endpoint(&self.endpoint);
in_data
}
fn update_filter_offset(&self, filter: &Self::FilterItem) -> Self::FilterItem {
let mut f = filter.clone();
f.offset = Some(f.count.unwrap() + f.offset.unwrap());
f
}
}
#[derive(Serialize, Deserialize, Debug, Clone)]
pub struct UpdateFeedbackParam {
#[serde(default)]
pub block_id: Vec<CampaignFeedbackType>,
#[serde(default)]
pub message: String,
#[serde(default)]
pub is_complete: String,
}
impl CampaignFeedbackType {
pub fn delete(&self) -> MailchimpResult<EmptyType> {
let endpoint = &self.get_base_endpoint();
self._api.delete::<EmptyType>(&endpoint, HashMap::new())
}
pub fn update(&self, param: UpdateFeedbackParam) -> MailchimpResult<CampaignFeedbackType> {
let endpoint = self.get_base_endpoint();
self._api
.patch::<CampaignFeedbackType, UpdateFeedbackParam>(&endpoint, param)
}
pub fn set_api(&mut self, api: Rc<MailchimpApi>) {
self._api = api
}
pub fn set_endpoint<'a>(&mut self, endpoint: &'a str) {
self._endpoint = endpoint.to_string()
}
fn get_base_endpoint(&self) -> String {
format!("{:?}/{:?}", self._endpoint, self.feedback_id)
}
}