Skip to main content

mailchimp/types/
list_segment_members.rs

1use super::link::LinkType;
2use super::list_members::ListMember;
3use crate::api::MailchimpApi;
4use crate::iter::{BuildIter, MailchimpCollection, SimpleFilter};
5use serde::{Deserialize, Serialize};
6use std::rc::Rc;
7
8///
9/// Response for endpoint GET /lists/{list_id}/segments/{segment_id}/members
10///
11#[derive(Serialize, Deserialize, Debug, Clone)]
12pub struct CollectionListSegmentMembers {
13    /// An array of objects, each representing a specific list member.
14    #[serde(default)]
15    pub members: Vec<ListMember>,
16    /// The total number of items matching the query regardless of pagination.
17    #[serde(default)]
18    pub total_items: u64,
19    /// A list of link types and descriptions for the API schema documents.
20    #[serde(default)]
21    pub _links: Vec<LinkType>,
22}
23
24impl MailchimpCollection<ListMember> for CollectionListSegmentMembers {
25    /// Total Items
26    fn get_total_items(&self) -> u64 {
27        self.total_items
28    }
29
30    /// Data
31    fn get_values(&self) -> Vec<ListMember> {
32        self.members.clone()
33    }
34}
35
36impl Default for CollectionListSegmentMembers {
37    fn default() -> Self {
38        CollectionListSegmentMembers {
39            members: Vec::new(),
40            total_items: 0,
41            _links: Vec::new(),
42        }
43    }
44}
45
46///
47/// ListSegmentMembersBuilder
48///
49#[derive(Debug)]
50pub struct ListSegmentMembersBuilder {
51    /// Resource Endpoint
52    pub endpoint: String,
53}
54
55impl BuildIter for ListSegmentMembersBuilder {
56    type Item = ListMember;
57    type FilterItem = SimpleFilter;
58    type Collection = CollectionListSegmentMembers;
59
60    ///
61    /// Crea un recurso a partir del dato pasado por parĂ¡metro
62    ///
63    fn update_item(&self, data: &Self::Item, api: Rc<MailchimpApi>) -> Self::Item {
64        let mut in_data = data.clone();
65        in_data.set_api(api);
66        in_data.set_endpoint(&self.endpoint);
67        in_data
68    }
69    ///
70    /// Actualiza el offset
71    ///
72    fn update_filter_offset(&self, filter: &Self::FilterItem) -> Self::FilterItem {
73        let mut f = filter.clone();
74        f.offset = Some(f.count.unwrap() + f.offset.unwrap());
75        f
76    }
77}