1use std::{
2 io::Write,
3 sync::Arc,
4};
5
6use tokio::sync::mpsc::UnboundedReceiver;
7
8use crate::{
9 cli::args::ExporterArgs,
10 event::TracerMessage,
11 proc::BaselineInfo,
12};
13
14pub struct ExporterMetadata {
15 pub baseline: Arc<BaselineInfo>,
16 pub exporter_args: ExporterArgs,
17}
18
19pub trait Exporter: Sized {
20 type Error;
21
22 fn new(
23 output: Box<dyn Write + Send + Sync + 'static>,
24 meta: ExporterMetadata,
25 stream: UnboundedReceiver<TracerMessage>,
26 ) -> Result<Self, Self::Error>;
27
28 #[allow(async_fn_in_trait)]
29 async fn run(self) -> Result<i32, Self::Error>;
30}