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