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
32impl 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
79impl 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>;