pinterest_api/response/
analytics.rs

1use serde::{Deserialize, Serialize};
2use std::collections::HashMap as Map;
3
4#[derive(Serialize, Deserialize, Debug, Clone)]
5#[serde(rename_all = "SCREAMING_SNAKE_CASE")]
6pub enum DataStatus {
7    Processing,
8    Ready,
9    Estimate,
10    BeforeBusinessCreated,
11    BeforeDataRetentionPeriod,
12    BeforePinDataRetentionPeriod,
13    BeforeMetricStartDate,
14    BeforeCoreMetricStartDate,
15    BeforePinFormatMetricStartDate,
16    BeforeAudienceMetricStartDate,
17    BeforeAudienceMonthlyMetricStartDate,
18    BeforeVideoMetricStartDate,
19    BeforeConversionMetricStartDate,
20    PurchasersMetricSmallerThanThreshold,
21    InBadTagDate,
22    BeforePublishedMetricStartDate,
23    BeforeAssistMetricStartDate,
24    BeforePinCreated,
25    BeforeAccountClaimed,
26    BeforeDemographicFiltersStartDate,
27    AudienceSegmentSmallerThanThreshold,
28    AudienceTotalSmallerThanThreshold,
29    BeforeProductGroupFilterStartDate,
30}
31
32// Privacyの表示を設定
33impl std::fmt::Display for DataStatus {
34    fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
35        match self {
36            Self::Processing => write!(f, "PROCESSING"),
37            Self::Ready => write!(f, "READY"),
38            Self::Estimate => write!(f, "ESTIMATE"),
39            Self::BeforeBusinessCreated => write!(f, "BEFORE_BUSINESS_CREATED"),
40            Self::BeforeDataRetentionPeriod => write!(f, "BEFORE_DATA_RETENTION_PERIOD"),
41            Self::BeforePinDataRetentionPeriod => write!(f, "BEFORE_PIN_DATA_RETENTION_PERIOD"),
42            Self::BeforeMetricStartDate => write!(f, "BEFORE_METRIC_START_DATE"),
43            Self::BeforeCoreMetricStartDate => write!(f, "BEFORE_CORE_METRIC_START_DATE"),
44            Self::BeforePinFormatMetricStartDate => {
45                write!(f, "BEFORE_PIN_FORMAT_METRIC_START_DATE")
46            }
47            Self::BeforeAudienceMetricStartDate => write!(f, "BEFORE_AUDIENCE_METRIC_START_DATE"),
48            Self::BeforeAudienceMonthlyMetricStartDate => {
49                write!(f, "BEFORE_AUDIENCE_MONTHLY_METRIC_START_DATE")
50            }
51            Self::BeforeVideoMetricStartDate => write!(f, "BEFORE_VIDEO_METRIC_START_DATE"),
52            Self::BeforeConversionMetricStartDate => {
53                write!(f, "BEFORE_CONVERSION_METRIC_START_DATE")
54            }
55            Self::PurchasersMetricSmallerThanThreshold => {
56                write!(f, "PURCHASERS_METRIC_SMALLER_THAN_THRESHOLD")
57            }
58            Self::InBadTagDate => write!(f, "IN_BAD_TAG_DATE"),
59            Self::BeforePublishedMetricStartDate => write!(f, "BEFORE_PUBLISHED_METRIC_START_DATE"),
60            Self::BeforeAssistMetricStartDate => write!(f, "BEFORE_ASSIST_METRIC_START_DATE"),
61            Self::BeforePinCreated => write!(f, "BEFORE_PIN_CREATED"),
62            Self::BeforeAccountClaimed => write!(f, "BEFORE_ACCOUNT_CLAIMED"),
63            Self::BeforeDemographicFiltersStartDate => {
64                write!(f, "BEFORE_DEMOGRAPHIC_FILTERS_START_DATE")
65            }
66            Self::AudienceSegmentSmallerThanThreshold => {
67                write!(f, "AUDIENCE_SEGMENT_SMALLER_THAN_THRESHOLD")
68            }
69            Self::AudienceTotalSmallerThanThreshold => {
70                write!(f, "AUDIENCE_TOTAL_SMALLER_THAN_THRESHOLD")
71            }
72            Self::BeforeProductGroupFilterStartDate => {
73                write!(f, "BEFORE_PRODUCT_GROUP_FILTER_START_DATE")
74            }
75        }
76    }
77}
78
79// Privacyのデフォルト値を設定
80impl Default for DataStatus {
81    fn default() -> Self {
82        Self::Processing
83    }
84}
85
86#[derive(Serialize, Deserialize, Debug, Clone, Default)]
87pub struct DailyMetrics {
88    pub data_status: DataStatus,
89    pub date: String,
90    pub metrics: serde_json::Value,
91
92    #[serde(flatten, skip_serializing_if = "Map::is_empty")]
93    pub extra: Map<String, serde_json::Value>,
94}
95
96#[derive(Serialize, Deserialize, Debug, Clone, Default)]
97pub struct AnalyticsItem {
98    pub lifetime_metrics: serde_json::Value,
99    pub daily_metrics: Vec<DailyMetrics>,
100    pub summary_metrics: serde_json::Value,
101
102    #[serde(flatten, skip_serializing_if = "Map::is_empty")]
103    pub extra: Map<String, serde_json::Value>,
104}
105
106pub type Analytics = Map<String, AnalyticsItem>;