mod layer;
use crate::tracing::InitError;
pub use crate::tracing::{
ingest::ModalityIngestTaskHandle, options::Options, r#async::layer::ModalityLayer,
};
use anyhow::Context as _;
use tracing_core::Dispatch;
pub struct TracingModality {
ingest_handle: ModalityIngestTaskHandle,
}
impl TracingModality {
pub async fn init() -> Result<Self, InitError> {
Self::init_with_options(Default::default()).await
}
pub async fn init_with_options(opts: Options) -> Result<Self, InitError> {
let (layer, ingest_handle) = ModalityLayer::init_with_options(opts)
.await
.context("initialize ModalityLayer")?;
let disp = Dispatch::new(layer.into_subscriber());
tracing::dispatcher::set_global_default(disp).unwrap();
Ok(Self { ingest_handle })
}
pub async fn finish(self) {
self.ingest_handle.finish().await;
}
}