use core::fmt::Debug;
use alloc::{boxed::Box, string::String, sync::Arc, vec::Vec};
use crate::typed_record::BoxFuture;
pub mod join;
pub mod single;
pub use single::{StatefulTransformBuilder, TransformBuilder, TransformPipeline};
#[cfg(feature = "observability")]
use crate::{profiling::Clock, StageMetrics};
pub use join::{JoinBuilder, JoinEventRx, JoinPipeline, JoinTrigger};
pub(crate) struct CollectedTransform {
pub task_future: BoxFuture<'static, ()>,
pub fanin_futures: Vec<BoxFuture<'static, ()>>,
}
#[cfg(feature = "observability")]
pub(crate) type TransformProfiling = Option<(Arc<StageMetrics>, Clock)>;
#[cfg(not(feature = "observability"))]
pub(crate) type TransformProfiling = ();
pub(crate) struct TransformDescriptor<T>
where
T: Send + 'static + Debug + Clone,
{
pub input_keys: Vec<String>,
#[allow(clippy::type_complexity)]
pub build_fn: Box<
dyn FnOnce(
crate::Producer<T>,
Arc<crate::AimDb>,
&str,
TransformProfiling,
) -> CollectedTransform
+ Send,
>,
}