use std::sync::Arc;
use subms::{ObservationCtx, SubMsBenchSummary, SubMsObserver};
pub struct CompositeObserver {
inner: Vec<Arc<dyn SubMsObserver>>,
}
impl CompositeObserver {
pub fn new(inner: Vec<Arc<dyn SubMsObserver>>) -> Self {
Self { inner }
}
pub fn with(mut self, observer: Arc<dyn SubMsObserver>) -> Self {
self.inner.push(observer);
self
}
pub fn observers(&self) -> &[Arc<dyn SubMsObserver>] {
&self.inner
}
}
impl SubMsObserver for CompositeObserver {
fn on_record(&self, ctx: &ObservationCtx, ns: u64) {
for obs in &self.inner {
obs.on_record(ctx, ns);
}
}
fn on_summarize(&self, summary: &SubMsBenchSummary) {
for obs in &self.inner {
obs.on_summarize(summary);
}
}
}