use std::{future::Future, pin::Pin};
use crate::{measurement::MeasurementBuffer, metrics::registry::MetricRegistry};
use super::error::WriteError;
pub trait Output: Send {
fn write(&mut self, measurements: &MeasurementBuffer, ctx: &OutputContext) -> Result<(), WriteError>;
}
pub struct AsyncOutputStream(
pub Pin<Box<dyn futures::Stream<Item = Result<MeasurementBuffer, StreamRecvError>> + Send>>,
);
pub use crate::pipeline::util::channel::StreamRecvError;
pub type BoxedAsyncOutput = Pin<Box<dyn Future<Output = anyhow::Result<()>> + Send + 'static>>;
pub struct OutputContext<'a> {
pub metrics: &'a MetricRegistry,
}