pub mod bucket;
pub mod metrics;
pub mod params;
pub mod pipeline;
pub use self::{bucket::*, metrics::*, params::*, pipeline::*};
use crate::Map;
macro_rules! aggregation {
($($variant:ident($query:ty)),+ $(,)?) => {
#[derive(Clone, PartialEq, Deserialize, Serialize)]
#[serde(untagged)]
#[allow(missing_docs, clippy::large_enum_variant)]
pub enum Aggregation {
$(
$variant($query),
)*
}
impl std::fmt::Debug for Aggregation {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
match self {
$(
Self::$variant(q) => q.fmt(f),
)+
}
}
}
$(
impl From<$query> for Aggregation {
fn from(q: $query) -> Self {
Aggregation::$variant(q)
}
}
)+
};
}
aggregation!(
Terms(TermsAggregation),
TopHits(TopHitsAggregation),
Cardinality(CardinalityAggregation),
Avg(AvgAggregation),
Max(MaxAggregation),
Min(MinAggregation),
Sum(SumAggregation),
Rate(RateAggregation),
Sampler(SamplerAggregation),
Filter(FilterAggregation),
DiversifiedSampler(DiversifiedSamplerAggregation),
Boxplot(BoxplotAggregation),
DateHistogram(DateHistogramAggregation),
GeotileGrid(GeotileGridAggregation),
BucketSelector(BucketSelectorAggregation),
Children(ChildrenAggregation),
Composite(CompositeAggregation),
Nested(NestedAggregation),
);
pub type Aggregations = Map<AggregationName, Aggregation>;