google_analytics_api_ga4/
run_realtime_report.rs1use crate::types::{Dimension, FilterExpression, Metric, MetricAggregation, OrderBy};
2use serde::{Deserialize, Serialize};
3
4#[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#[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}