google_analytics_api_ga4/
types.rs

1use serde::{Deserialize, Serialize};
2
3/// https://developers.google.com/analytics/devguides/reporting/data/v1/rest/v1beta/CohortSpec#CohortsRange
4#[derive(Default, Debug, Serialize, Deserialize, Clone)]
5pub struct CohortSpec {
6    cohorts: Option<Vec<Cohort>>,
7    #[serde(rename = "cohortsRange")]
8    cohorts_range: Option<Vec<Cohort>>,
9    #[serde(rename = "cohortReportSettings")]
10    cohort_report_settings: Option<CohortReportSettings>,
11}
12
13
14#[derive(Default, Debug, Serialize, Deserialize, Clone)]
15pub struct Cohort {
16    name: Option<String>,
17    dimension: Option<String>,
18    #[serde(rename = "dateRange")]
19    date_range: Option<DateRange>,
20}
21
22#[derive(Default, Debug, Serialize, Deserialize, Clone)]
23pub struct CohortsRange {
24    granularity: Option<String>,
25    #[serde(rename = "startOffset")]
26    start_offset: Option<i32>,
27    #[serde(rename = "endOffset")]
28    end_offset: Option<i32>,
29}
30
31#[derive(Default, Debug, Serialize, Deserialize, Clone)]
32pub struct CohortReportSettings {
33    accumulate: Option<bool>,
34}
35
36/// https://developers.google.com/analytics/devguides/reporting/data/v1/rest/v1beta/DateRange
37#[derive(Default, Debug, Serialize, Deserialize, Clone)]
38pub struct DateRange {
39    #[serde(rename = "startDate")]
40    pub start_date: Option<String>,
41    #[serde(rename = "endDate")]
42    pub end_date: Option<String>,
43    pub name: Option<String>,
44}
45
46impl DateRange {
47    pub fn new(name: &str, start: &str, end: &str) -> DateRange {
48        DateRange {
49            name: Some(name.to_string()),
50            start_date: Some(start.to_string()),
51            end_date: Some(end.to_string()),
52        }
53    }
54}
55
56/// https://developers.google.com/analytics/devguides/reporting/data/v1/rest/v1beta/Dimension
57#[derive(Default, Debug, Serialize, Deserialize, Clone)]
58pub struct Dimension {
59    pub name: Option<String>,
60    #[serde(rename = "dimensionExpression")]
61    pub dimension_expression: Option<DimensionExpression>,
62}
63
64impl Dimension {
65    pub fn new(name: &str) -> Dimension {
66        Dimension {
67            name: Some(name.to_string()),
68            ..Dimension::default()
69        }
70    }
71}
72
73#[derive(Default, Debug, Serialize, Deserialize, Clone)]
74pub struct DimensionExpression {
75    #[serde(rename = "lowerCase")]
76    pub lower_case: Option<CaseExpression>,
77    #[serde(rename = "upperCase")]
78    pub upper_case: Option<CaseExpression>,
79    #[serde(rename = "concatenate")]
80    pub concatenate: Option<ConcatenateExpression>,
81
82}
83
84#[derive(Default, Debug, Serialize, Deserialize, Clone)]
85pub struct CaseExpression {
86    #[serde(rename = "dimensionName")]
87    pub dimension_name: Option<String>,
88
89}
90
91#[derive(Default, Debug, Serialize, Deserialize, Clone)]
92pub struct ConcatenateExpression {
93    #[serde(rename = "dimensionNames")]
94    pub dimension_names: Option<Vec<String>>,
95    pub delimiter: Option<String>,
96}
97
98/// https://developers.google.com/analytics/devguides/reporting/data/v1/rest/v1beta/DimensionHeader
99#[derive(Default, Debug, Serialize, Deserialize, Clone)]
100pub struct DimensionHeader {
101    pub name: Option<String>,
102}
103
104
105/// https://developers.google.com/analytics/devguides/reporting/data/v1/rest/v1beta/DimensionMetadata
106#[derive(Default, Debug, Serialize, Deserialize, Clone)]
107pub struct DimensionMetadata {
108    #[serde(rename = "apiName")]
109    pub api_name: Option<String>,
110    #[serde(rename = "uiName")]
111    pub ui_name: Option<String>,
112    pub description: Option<String>,
113    #[serde(rename = "deprecatedApiNames")]
114    pub deprecated_api_names: Option<Vec<String>>,
115    #[serde(rename = "customDefinition")]
116    pub custom_definition: Option<bool>,
117    pub category: Option<String>,
118}
119
120/// https://developers.google.com/analytics/devguides/reporting/data/v1/rest/v1beta/DimensionValue
121#[derive(Default, Debug, Serialize, Deserialize, Clone)]
122pub struct DimensionValue {
123    pub value: Option<String>,
124}
125
126/// https://developers.google.com/analytics/devguides/reporting/data/v1/rest/v1beta/FilterExpression
127#[derive(Default, Debug, Serialize, Deserialize, Clone)]
128pub struct FilterExpression {
129    #[serde(rename = "andGroup")]
130    pub and_group: Option<FilterExpressionList>,
131    #[serde(rename = "orGroup")]
132    pub or_group: Option<FilterExpressionList>,
133    #[serde(rename = "notExpression")]
134    pub not_expression: Box<Option<FilterExpression>>,
135    pub filter: Option<Filter>,
136}
137
138#[derive(Default, Debug, Serialize, Deserialize, Clone)]
139pub struct FilterExpressionList {
140    pub expressions: Option<Vec<FilterExpression>>,
141}
142
143#[derive(Default, Debug, Serialize, Deserialize, Clone)]
144pub struct Filter {
145    #[serde(rename = "fieldName")]
146    pub field_name: Option<String>,
147    #[serde(rename = "stringFilter")]
148    pub string_filter: Option<StringFilter>,
149    #[serde(rename = "inListFilter")]
150    pub in_list_filter: Option<InListFilter>,
151    #[serde(rename = "numericFilter")]
152    pub numeric_filter: Option<NumericFilter>,
153    #[serde(rename = "betweenFilter")]
154    pub between_filter: Option<BetweenFilter>,
155}
156
157#[derive(Default, Debug, Serialize, Deserialize, Clone)]
158pub struct StringFilter {
159    #[serde(rename = "matchType")]
160    pub match_type: Option<MatchType>,
161    pub value: Option<String>,
162    #[serde(rename = "caseSensitive")]
163    pub case_sensitive: Option<bool>,
164}
165
166#[derive(Debug, Serialize, Deserialize,Clone)]
167pub enum MatchType {
168    #[serde(rename = "MATCH_TYPE_UNSPECIFIED")]
169    MatchTypeUnspecified,
170    #[serde(rename = "EXACT")]
171    Exact,
172    #[serde(rename = "BEGINS_WITH")]
173    BeginsWith,
174    #[serde(rename = "ENDS_WITH")]
175    EndsWith,
176    #[serde(rename = "CONTAINS")]
177    Contains,
178    #[serde(rename = "FULL_REGEXP")]
179    FullRegexp,
180    #[serde(rename = "PARTIAL_REGEXP")]
181    PartialRegexp,
182}
183
184#[derive(Default, Debug, Serialize, Deserialize, Clone)]
185pub struct InListFilter {
186    values: Option<Vec<String>>,
187    #[serde(rename = "caseSensitive")]
188    case_sensitive: Option<bool>,
189}
190
191#[derive(Default, Debug, Serialize, Deserialize, Clone)]
192pub struct NumericFilter {
193    operation: Option<Operation>,
194    value: Option<NumericValue>,
195}
196
197#[derive(Debug, Serialize, Deserialize,Clone)]
198pub enum Operation {
199    #[serde(rename = "OPERATION_UNSPECIFIED")]
200    OperationUnspecified,
201    #[serde(rename = "EQUAL")]
202    Equal,
203    #[serde(rename = "LESS_THAN")]
204    LessThan,
205    #[serde(rename = "LESS_THAN_OR_EQUAL")]
206    LessThanOrEqual,
207    #[serde(rename = "GREATER_THAN")]
208    GreaterThan,
209    #[serde(rename = "GREATER_THAN_OR_EQUAL")]
210    GreaterThanOrEqual,
211}
212
213
214#[derive(Default, Debug, Serialize, Deserialize, Clone)]
215pub struct NumericValue {
216    #[serde(rename = "int64Value")]
217    int_64_value: Option<String>,
218    #[serde(rename = "doubleValue")]
219    double_value: Option<i32>,
220}
221
222#[derive(Default, Debug, Serialize, Deserialize, Clone)]
223pub struct BetweenFilter {
224    #[serde(rename = "fromValue")]
225    from_value: Option<NumericValue>,
226    #[serde(rename = "toValue")]
227    to_value: Option<NumericValue>,
228
229}
230
231/// https://developers.google.com/analytics/devguides/reporting/data/v1/rest/v1beta/Metric
232#[derive(Default, Debug, Serialize, Deserialize, Clone)]
233pub struct Metric {
234    pub name: Option<String>,
235    pub expression: Option<String>,
236    pub invisible: Option<bool>,
237}
238
239impl Metric {
240    pub fn new(name: &str) -> Metric {
241        Metric {
242            name: Some(name.to_string()),
243            ..Metric::default()
244        }
245    }
246}
247
248/// https://developers.google.com/analytics/devguides/reporting/data/v1/rest/v1beta/MetricAggregation
249#[derive(Debug, Serialize, Deserialize,Clone)]
250pub enum MetricAggregation {
251    #[serde(rename = "METRIC_AGGREGATION_UNSPECIFIED")]
252    MetricAggregationUnspecified,
253    #[serde(rename = "TOTAL")]
254    Total,
255    #[serde(rename = "MINIMUM")]
256    Minimum,
257    #[serde(rename = "MAXIMUM")]
258    Maximum,
259    #[serde(rename = "COUNT")]
260    Count,
261}
262
263/// https://developers.google.com/analytics/devguides/reporting/data/v1/rest/v1beta/MetricHeader
264#[derive(Default, Debug, Serialize, Deserialize, Clone)]
265pub struct MetricHeader {
266    pub name: Option<String>,
267    #[serde(rename = "type")]
268    pub metric_type: Option<String>,
269}
270
271/// https://developers.google.com/analytics/devguides/reporting/data/v1/rest/v1beta/MetricHeader
272#[derive(Default, Debug, Serialize, Deserialize, Clone)]
273pub struct MetricMetadata {
274    #[serde(rename = "apiName")]
275    pub api_name: String,
276    #[serde(rename = "uiName")]
277    pub ui_name: String,
278    pub description: String,
279    #[serde(rename = "deprecatedApiNames")]
280    pub deprecated_api_names: Vec<String>,
281    #[serde(rename = "type")]
282    pub metric_type: String,
283    pub expression: String,
284    #[serde(rename = "customDefinition")]
285    pub custom_definition: bool,
286    #[serde(rename = "blockedReasons")]
287    pub blocked_reasons: Vec<String>,
288    pub category: String,
289}
290
291/// https://developers.google.com/analytics/devguides/reporting/data/v1/rest/v1beta/MetricType
292#[derive(Debug, Serialize, Deserialize,Clone)]
293pub enum MetricType {
294    #[serde(rename = "METRIC_TYPE_UNSPECIFIED")]
295    MetricTypeUnspecified,
296    #[serde(rename = "TYPE_INTEGER")]
297    TypeInteger,
298    #[serde(rename = "TYPE_FLOAT")]
299    TypeFloat,
300    #[serde(rename = "TYPE_SECONDS")]
301    TypeSeconds,
302    #[serde(rename = "TYPE_MILLISECONDS")]
303    TypeMilliseconds,
304    #[serde(rename = "TYPE_MINUTES")]
305    TypeMinutes,
306    #[serde(rename = "TYPE_HOURS")]
307    TypeHours,
308    #[serde(rename = "TYPE_STANDARD")]
309    TypeStandard,
310    #[serde(rename = "TYPE_CURRENCY")]
311    TypeCurrency,
312    #[serde(rename = "TYPE_FEET")]
313    TypeFeet,
314    #[serde(rename = "TYPE_MILES")]
315    TypeMiles,
316    #[serde(rename = "TYPE_METERS")]
317    TypeMeters,
318    #[serde(rename = "TYPE_KILOMETERS")]
319    TypeKilometers,
320
321}
322
323/// https://developers.google.com/analytics/devguides/reporting/data/v1/rest/v1beta/OrderBy
324#[derive(Default, Debug, Serialize, Deserialize, Clone)]
325pub struct OrderBy {}
326
327#[derive(Default, Debug, Serialize, Deserialize, Clone)]
328pub struct MetricOrderBy {
329    #[serde(rename = "metricName")]
330    pub metric_name: Option<String>,
331}
332
333#[derive(Default, Debug, Serialize, Deserialize, Clone)]
334pub struct DimensionOrderBy {
335    #[serde(rename = "dimensionName")]
336    pub dimension_name: Option<String>,
337    #[serde(rename = "orderType")]
338    pub order_type: Option<OrderType>,
339}
340
341#[derive(Debug, Serialize, Deserialize,Clone)]
342pub enum OrderType {
343    #[serde(rename = "ORDER_TYPE_UNSPECIFIED")]
344    OrderTypeUnspecified,
345    #[serde(rename = "ALPHANUMERIC")]
346    Alphanumeric,
347    #[serde(rename = "CASE_INSENSITIVE_ALPHANUMERIC")]
348    CaseInsensitiveAlphanumeric,
349    #[serde(rename = "NUMERIC")]
350    Numeric,
351}
352
353#[derive(Default, Debug, Serialize, Deserialize, Clone)]
354pub struct PivotOrderBy {
355    #[serde(rename = "metricName")]
356    pub metric_name: Option<String>,
357    #[serde(rename = "pivotSelections")]
358    pub pivot_selections: Option<Vec<PivotSelection>>,
359}
360
361#[derive(Default, Debug, Serialize, Deserialize, Clone)]
362pub struct PivotSelection {
363    #[serde(rename = "dimensionName")]
364    pub dimension_name: Option<String>,
365    #[serde(rename = "dimensionValue")]
366    pub dimension_value: Option<String>,
367}
368
369
370/// https://developers.google.com/analytics/devguides/reporting/data/v1/rest/v1beta/Pivot
371#[derive(Default, Debug, Serialize, Deserialize, Clone)]
372pub struct Pivot {
373    #[serde(rename = "fieldNames")]
374    pub field_names: Option<Vec<String>>,
375    #[serde(rename = "orderBys")]
376    pub order_bys: Option<Vec<OrderBy>>,
377    #[serde(rename = "offset")]
378    pub offset: Option<String>,
379    #[serde(rename = "limit")]
380    pub limit: Option<String>,
381    #[serde(rename = "metricAggregations")]
382    pub metric_aggregations: Option<Vec<MetricAggregation>>,
383}
384
385/// https://developers.google.com/analytics/devguides/reporting/data/v1/rest/v1beta/PropertyQuota
386#[derive(Default, Debug, Serialize, Deserialize, Clone)]
387pub struct PropertyQuota {
388    #[serde(rename = "tokensPerDay")]
389    pub tokens_per_day: Option<QuotaStatus>,
390    #[serde(rename = "tokensPerHour")]
391    pub tokens_per_hour: Option<QuotaStatus>,
392    #[serde(rename = "concurrentRequests")]
393    pub concurrent_requests: Option<QuotaStatus>,
394    #[serde(rename = "serverErrorsPerProjectPerHour")]
395    pub server_errors_per_project_per_hour: Option<QuotaStatus>,
396    #[serde(rename = "potentiallyThresholdedRequestsPerHour")]
397    pub potentially_thresholded_requests_per_hour: Option<QuotaStatus>,
398}
399
400#[derive(Default, Debug, Serialize, Deserialize, Clone)]
401pub struct QuotaStatus {
402    pub consumed: i32,
403    pub remaining: i32,
404}
405
406/// https://developers.google.com/analytics/devguides/reporting/data/v1/rest/v1beta/ResponseMetaData
407#[derive(Default, Debug, Serialize, Deserialize, Clone)]
408pub struct ResponseMetaData {
409    #[serde(rename = "dataLossFromOtherRow")]
410    pub data_loss_from_other_row: Option<bool>,
411    #[serde(rename = "schemaRestrictionResponse")]
412    pub schema_restriction_response: Option<SchemaRestrictionResponse>,
413    #[serde(rename = "currencyCode")]
414    pub currency_code: Option<String>,
415    #[serde(rename = "timeZone")]
416    pub time_zone: Option<String>,
417    #[serde(rename = "emptyReason")]
418    pub empty_reason: Option<String>,
419    #[serde(rename = "subjectToThresholding")]
420    pub subject_to_thresholding: Option<bool>,
421}
422
423#[derive(Default, Debug, Serialize, Deserialize, Clone)]
424pub struct SchemaRestrictionResponse {
425    #[serde(rename = "activeMetricRestrictions")]
426    pub active_metric_restrictions: Option<Vec<ActiveMetricRestriction>>,
427}
428
429#[derive(Default, Debug, Serialize, Deserialize, Clone)]
430pub struct ActiveMetricRestriction {
431    #[serde(rename = "restrictedMetricTypes")]
432    pub restricted_metric_types: Option<Vec<RestrictedMetricType>>,
433    #[serde(rename = "metricName")]
434    pub metric_name: Option<bool>,
435}
436
437#[derive(Debug, Serialize, Deserialize,Clone)]
438pub enum RestrictedMetricType {
439    #[serde(rename = "RESTRICTED_METRIC_TYPE_UNSPECIFIED")]
440    RestrictedMetricTypeUnspecified,
441    #[serde(rename = "COST_DATA")]
442    CostData,
443    #[serde(rename = "REVENUE_DATA")]
444    RevenueData,
445}
446
447/// https://developers.google.com/analytics/devguides/reporting/data/v1/rest/v1beta/Row
448#[derive(Default, Debug, Serialize, Deserialize, Clone)]
449pub struct Row {
450    #[serde(rename = "dimensionValues")]
451    pub dimension_values: Option<Vec<DimensionValue>>,
452    #[serde(rename = "metricValues")]
453    pub metric_values: Option<Vec<MetricValue>>,
454}
455
456#[derive(Default, Debug, Serialize, Deserialize, Clone)]
457pub struct MetricValue {
458    pub value: Option<String>,
459}
460
461/// https://developers.google.com/analytics/devguides/reporting/data/v1/rest/v1beta/RunPivotReportResponse
462#[derive(Default, Debug, Serialize, Deserialize, Clone)]
463pub struct RunPivotReportResponse {
464    #[serde(rename = "pivotHeaders")]
465    pub pivot_headers: Option<Vec<PivotHeader>>,
466    #[serde(rename = "dimensionHeaders")]
467    pub dimension_headers: Option<Vec<DimensionHeader>>,
468    #[serde(rename = "metricHeaders")]
469    pub metric_headers: Option<Vec<MetricHeader>>,
470    pub rows: Option<Vec<Row>>,
471    pub aggregates: Option<Vec<Row>>,
472    pub metadata: Option<ResponseMetaData>,
473    #[serde(rename = "propertyQuota")]
474    pub property_quota: Option<PropertyQuota>,
475    pub kind: Option<String>,
476}
477
478#[derive(Default, Debug, Serialize, Deserialize, Clone)]
479pub struct PivotHeader {
480    #[serde(rename = "pivotDimensionHeaders")]
481    pub pivot_dimension_headers: Option<Vec<PivotDimensionHeader>>,
482    #[serde(rename = "rowCount")]
483    pub row_count: Option<i32>,
484}
485
486#[derive(Default, Debug, Serialize, Deserialize, Clone)]
487pub struct PivotDimensionHeader {
488    #[serde(rename = "dimensionValues")]
489    pub dimension_values: Option<Vec<DimensionValue>>,
490}
491
492/// https://developers.google.com/analytics/devguides/reporting/data/v1/rest/v1beta/RunReportResponse
493#[derive(Default, Debug, Serialize, Deserialize, Clone)]
494pub struct RunReportResponse {
495    #[serde(rename = "dimensionHeaders")]
496    pub dimension_headers: Option<Vec<DimensionHeader>>,
497    #[serde(rename = "metricHeaders")]
498    pub metric_headers: Option<Vec<MetricHeader>>,
499    pub rows: Option<Vec<Row>>,
500    pub totals: Option<Vec<Row>>,
501    pub maximums: Option<Vec<Row>>,
502    pub minimums: Option<Vec<Row>>,
503    #[serde(rename = "rowCount")]
504    pub row_count: Option<i32>,
505    pub metadata: Option<ResponseMetaData>,
506    #[serde(rename = "propertyQuota")]
507    pub property_quota: Option<PropertyQuota>,
508    pub kind: Option<String>,
509}