use serde::{Deserialize, Serialize};
use serde_with::skip_serializing_none;
use crate::{AdvancedFilter, AggregateFilter};
use super::AssetFilter;
#[derive(Serialize, Deserialize, Debug, Clone, Copy, Eq, PartialEq)]
#[serde(rename_all = "camelCase")]
pub enum AssetAggregatedProperty {
ChildCount,
Path,
Depth,
}
#[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 AssetAggregateCount {
PropertyCount {
advanced_filter: Option<AdvancedFilter>,
filter: Option<AssetFilter>,
properties: Vec<AggregateProperty>,
},
AssetCount {
advanced_filter: Option<AdvancedFilter>,
filter: Option<AssetFilter>,
},
}
#[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<AssetFilter>,
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<AssetFilter>,
path: Vec<String>,
}
#[skip_serializing_none]
#[derive(Serialize, Deserialize, Debug, Clone)]
#[serde(rename_all = "camelCase")]
pub enum AssetAggregateRequest {
Count(AssetAggregateCount),
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 AssetAggregateResponse {
Strings {
count: i64,
values: Vec<String>,
},
Integers {
count: i64,
values: Vec<i64>,
},
Properties {
count: i64,
values: Vec<AggregatedProperty>,
},
Count {
count: i64,
},
}