use serde::Deserialize;
pub(crate) use super::serialization_deserialization::*;
#[cfg_attr(test, derive(PartialEq))]
#[cfg_attr(feature = "graphql", derive(async_graphql::SimpleObject))]
#[cfg_attr(feature = "graphql", graphql(name = "AggregationResponse"))]
#[derive(Deserialize, Clone, Debug)]
#[serde(from = "ElasticAggregationResponse")]
pub struct Response {
pub aggregations: Vec<ComputedResult>,
}
#[cfg_attr(feature = "graphql", derive(async_graphql::SimpleObject))]
#[cfg_attr(feature = "graphql", graphql(name = "AggregationResult"))]
#[derive(Deserialize, Clone, Debug)]
pub struct ComputedResult {
pub parent: Option<String>,
pub name: String,
pub type_: Ty,
pub fields: Vec<String>,
pub values: Vec<f64>,
pub metadata: Option<crate::scalars::Map>,
}
#[cfg_attr(feature = "graphql", derive(async_graphql::Enum, Eq, PartialEq, Copy))]
#[cfg_attr(feature = "graphql", graphql(name = "AggregationType"))]
#[derive(Deserialize, Clone, Debug)]
pub enum Ty {
Avg,
WeightedAvg,
Cardinality,
Max,
Min,
MedianAbsoluteDeviation,
Percentiles,
PercentileRanks,
Stats,
ExtendedStats,
Sum,
ValueCount,
Filter,
Filters,
Terms,
SignificantTerms,
Range,
DateRange,
DateHistogram,
AutoDateHistogram,
Nested,
ReverseNested,
BucketScript,
BucketSelector,
BucketSort,
Unknown,
}
impl From<&str> for Ty {
#[inline]
fn from(value: &str) -> Self {
use self::Ty::*;
match value.to_lowercase().as_str() {
"avg" => Avg,
"weighted_avg" => WeightedAvg,
"cardinality" => Cardinality,
"max" => Max,
"min" => Min,
"median_absolute_deviation" => MedianAbsoluteDeviation,
"percentiles" => Percentiles,
"percentile_ranks" => PercentileRanks,
"stats" => Stats,
"extended_stats" => ExtendedStats,
"sum" => Sum,
"value_count" => ValueCount,
"filter" => Filter,
"filters" => Filters,
"terms" => Terms,
"sterms" => SignificantTerms,
"range" => Range,
"date_range" => DateRange,
"date_histogram" => DateHistogram,
"auto_date_histogram" => AutoDateHistogram,
"bucket_script" => BucketScript,
"bucket_selector" => BucketSelector,
"bucket_sort" => BucketSort,
"nested" => Nested,
"reverse_nested" => ReverseNested,
_ => Unknown,
}
}
}