Skip to main content

allora_runtime/spec/
aggregators_spec.rs

1//! `AggregatorsSpec`: collection of [`AggregatorSpec`] entries (v1) sharing a version.
2//!
3//! Preserves declaration order (Vec internally). Like [`crate::spec::FiltersSpec`],
4//! this collection does *not* perform uniqueness checks; uniqueness + deterministic
5//! auto-ids (`aggregator:auto.N`) are enforced in
6//! [`crate::dsl::build_aggregators_from_spec`].
7
8use crate::spec::AggregatorSpec;
9
10#[derive(Debug, Clone)]
11pub struct AggregatorsSpec {
12    version: u32,
13    aggregators: Vec<AggregatorSpec>,
14}
15
16impl AggregatorsSpec {
17    pub fn new(version: u32) -> Self {
18        Self {
19            version,
20            aggregators: Vec::new(),
21        }
22    }
23    pub fn add(mut self, a: AggregatorSpec) -> Self {
24        self.aggregators.push(a);
25        self
26    }
27    pub fn push(&mut self, a: AggregatorSpec) {
28        self.aggregators.push(a);
29    }
30    pub fn version(&self) -> u32 {
31        self.version
32    }
33    pub fn aggregators(&self) -> &[AggregatorSpec] {
34        &self.aggregators
35    }
36    pub fn into_aggregators(self) -> Vec<AggregatorSpec> {
37        self.aggregators
38    }
39}