Skip to main content

google_analytics_api_ga4/
run_realtime_report.rs

1use crate::types::{Dimension, FilterExpression, Metric, MetricAggregation, OrderBy};
2use serde::{Deserialize, Serialize};
3
4/// Realtime Dimensions & Metrics
5/// <https://developers.google.com/analytics/devguides/reporting/data/v1/realtime-api-schema>
6#[derive(Default, Debug, Serialize, Deserialize, Clone)]
7#[serde(rename_all = "camelCase")]
8pub struct RunRealtimeReportRequest {
9    pub dimensions: Vec<Dimension>,
10    pub metrics: Vec<Metric>,
11    #[serde(skip_serializing_if = "Option::is_none")]
12    pub dimension_filter: Option<FilterExpression>,
13    #[serde(skip_serializing_if = "Option::is_none")]
14    pub metric_filter: Option<FilterExpression>,
15    #[serde(skip_serializing_if = "Option::is_none")]
16    pub limit: Option<String>,
17    #[serde(skip_serializing_if = "Option::is_none")]
18    pub metric_aggregations: Option<Vec<MetricAggregation>>,
19    #[serde(skip_serializing_if = "Option::is_none")]
20    pub order_bys: Option<Vec<OrderBy>>,
21    #[serde(skip_serializing_if = "Option::is_none")]
22    pub return_property_quota: Option<bool>,
23    #[serde(skip_serializing_if = "Option::is_none")]
24    pub minute_ranges: Option<Vec<MinuteRange>>,
25}
26
27/// <https://developers.google.com/analytics/devguides/reporting/data/v1/rest/v1beta/MinuteRange>
28#[derive(Default, Debug, Serialize, Deserialize, Clone)]
29#[serde(rename_all = "camelCase")]
30pub struct MinuteRange {
31    #[serde(skip_serializing_if = "Option::is_none")]
32    pub name: Option<String>,
33    #[serde(skip_serializing_if = "Option::is_none")]
34    pub start_minutes_ago: Option<i32>,
35    #[serde(skip_serializing_if = "Option::is_none")]
36    pub end_minutes_ago: Option<i32>,
37}
38
39impl MinuteRange {
40    pub fn new(name: &str, start_minutes_ago: i32, end_minutes_ago: i32) -> MinuteRange {
41        MinuteRange {
42            name: Some(name.to_string()),
43            start_minutes_ago: Some(start_minutes_ago),
44            end_minutes_ago: Some(end_minutes_ago),
45        }
46    }
47    pub fn single_minute(time: i32) -> MinuteRange {
48        MinuteRange::new(format!("Minute {}", time).as_str(), time, time)
49    }
50}