use serde::{Deserialize, Serialize};
use serde_with::skip_serializing_none;
use crate::{AdvancedFilter, AggregateFilter};
use super::EventFilter;
#[skip_serializing_none]
#[derive(Serialize, Deserialize, Debug, Clone)]
#[serde(rename_all = "camelCase")]
pub struct AggregateProperty {
property: Vec<String>,
filter: Option<AggregateFilter>,
}
#[skip_serializing_none]
#[derive(Serialize, Deserialize, Debug, Clone)]
#[serde(untagged, rename_all_fields = "camelCase")]
pub enum EventAggregateCount {
PropertyCount {
advanced_filter: Option<AdvancedFilter>,
filter: Option<EventFilter>,
properties: Vec<AggregateProperty>,
},
EventCount {
advanced_filter: Option<AdvancedFilter>,
filter: Option<EventFilter>,
},
}
#[skip_serializing_none]
#[derive(Serialize, Deserialize, Debug, Clone, Default)]
#[serde(rename_all = "camelCase")]
pub struct AggregateWithProperty {
aggregate_filter: Option<AggregateFilter>,
advanced_filter: Option<AdvancedFilter>,
filter: Option<EventFilter>,
properties: Vec<AggregateProperty>,
}
#[skip_serializing_none]
#[derive(Serialize, Deserialize, Debug, Clone, Default)]
#[serde(rename_all = "camelCase")]
pub struct AggregateWithPath {
aggregate_filter: Option<AggregateFilter>,
advanced_filter: Option<AdvancedFilter>,
filter: Option<EventFilter>,
path: Vec<String>,
}
#[skip_serializing_none]
#[derive(Serialize, Deserialize, Debug, Clone)]
#[serde(rename_all = "camelCase")]
pub enum EventAggregateRequest {
Count(EventAggregateCount),
CardinalityValues(AggregateWithProperty),
CardinalityProperties(AggregateWithPath),
UniqueValues(AggregateProperty),
UniqueProperties(AggregateWithPath),
}
#[skip_serializing_none]
#[derive(Serialize, Deserialize, Debug, Clone, Default)]
#[serde(rename_all = "camelCase")]
pub struct AggregatedProperty {
property: Vec<String>,
}
#[skip_serializing_none]
#[derive(Serialize, Deserialize, Debug, Clone)]
#[serde(untagged, rename_all_fields = "camelCase")]
pub enum EventAggregateResponse {
Strings {
count: i64,
values: Vec<String>,
},
Integers {
count: i64,
values: Vec<i64>,
},
Properties {
count: i64,
values: Vec<AggregatedProperty>,
},
Count {
count: i64,
},
}