pinterest_api/response/
analytics.rs

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
use std::collections::HashMap;

use serde::{Deserialize, Serialize};

#[derive(Serialize, Deserialize, Debug, Clone)]
#[serde(rename_all = "SCREAMING_SNAKE_CASE")]
pub enum DataStatus {
    Processing,
    Ready,
    Estimate,
    BeforeBusinessCreated,
    BeforeDataRetentionPeriod,
    BeforePinDataRetentionPeriod,
    BeforeMetricStartDate,
    BeforeCoreMetricStartDate,
    BeforePinFormatMetricStartDate,
    BeforeAudienceMetricStartDate,
    BeforeAudienceMonthlyMetricStartDate,
    BeforeVideoMetricStartDate,
    BeforeConversionMetricStartDate,
    PurchasersMetricSmallerThanThreshold,
    InBadTagDate,
    BeforePublishedMetricStartDate,
    BeforeAssistMetricStartDate,
    BeforePinCreated,
    BeforeAccountClaimed,
    BeforeDemographicFiltersStartDate,
    AudienceSegmentSmallerThanThreshold,
    AudienceTotalSmallerThanThreshold,
    BeforeProductGroupFilterStartDate,
}

// Privacyの表示を設定
impl std::fmt::Display for DataStatus {
    fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
        match self {
            Self::Processing => write!(f, "PROCESSING"),
            Self::Ready => write!(f, "READY"),
            Self::Estimate => write!(f, "ESTIMATE"),
            Self::BeforeBusinessCreated => write!(f, "BEFORE_BUSINESS_CREATED"),
            Self::BeforeDataRetentionPeriod => write!(f, "BEFORE_DATA_RETENTION_PERIOD"),
            Self::BeforePinDataRetentionPeriod => write!(f, "BEFORE_PIN_DATA_RETENTION_PERIOD"),
            Self::BeforeMetricStartDate => write!(f, "BEFORE_METRIC_START_DATE"),
            Self::BeforeCoreMetricStartDate => write!(f, "BEFORE_CORE_METRIC_START_DATE"),
            Self::BeforePinFormatMetricStartDate => write!(f, "BEFORE_PIN_FORMAT_METRIC_START_DATE"),
            Self::BeforeAudienceMetricStartDate => write!(f, "BEFORE_AUDIENCE_METRIC_START_DATE"),
            Self::BeforeAudienceMonthlyMetricStartDate => write!(f, "BEFORE_AUDIENCE_MONTHLY_METRIC_START_DATE"),
            Self::BeforeVideoMetricStartDate => write!(f, "BEFORE_VIDEO_METRIC_START_DATE"),
            Self::BeforeConversionMetricStartDate => write!(f, "BEFORE_CONVERSION_METRIC_START_DATE"),
            Self::PurchasersMetricSmallerThanThreshold => write!(f, "PURCHASERS_METRIC_SMALLER_THAN_THRESHOLD"),
            Self::InBadTagDate => write!(f, "IN_BAD_TAG_DATE"),
            Self::BeforePublishedMetricStartDate => write!(f, "BEFORE_PUBLISHED_METRIC_START_DATE"),
            Self::BeforeAssistMetricStartDate => write!(f, "BEFORE_ASSIST_METRIC_START_DATE"),
            Self::BeforePinCreated => write!(f, "BEFORE_PIN_CREATED"),
            Self::BeforeAccountClaimed => write!(f, "BEFORE_ACCOUNT_CLAIMED"),
            Self::BeforeDemographicFiltersStartDate => write!(f, "BEFORE_DEMOGRAPHIC_FILTERS_START_DATE"),
            Self::AudienceSegmentSmallerThanThreshold => write!(f, "AUDIENCE_SEGMENT_SMALLER_THAN_THRESHOLD"),
            Self::AudienceTotalSmallerThanThreshold => write!(f, "AUDIENCE_TOTAL_SMALLER_THAN_THRESHOLD"),
            Self::BeforeProductGroupFilterStartDate => write!(f, "BEFORE_PRODUCT_GROUP_FILTER_START_DATE"),
        }
    }
}

// Privacyのデフォルト値を設定
impl Default for DataStatus {
    fn default() -> Self {
        Self::Processing
    }
}

#[derive(Serialize, Deserialize, Debug, Clone, Default)]
pub struct DailyMetrics {
    pub data_status: DataStatus,
    pub date: String,
    pub metrics: serde_json::Value,
}

#[derive(Serialize, Deserialize, Debug, Clone, Default)]
pub struct AnalyticsItem {
    pub lifetime_metrics: serde_json::Value,
    pub daily_metrics: Vec<DailyMetrics>,
    pub summary_metrics: serde_json::Value,
}

pub type Analytics = HashMap<String, AnalyticsItem>;