use core::any::Any;
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 = "alloc")]
pub use join::{JoinBuilder, JoinEventRx, JoinPipeline, JoinTrigger};
pub(crate) struct TransformDescriptor<T, R: aimdb_executor::Spawn + 'static>
where
T: Send + 'static + Debug + Clone,
{
pub input_keys: Vec<String>,
#[allow(clippy::type_complexity)]
pub spawn_fn: Box<
dyn FnOnce(
crate::Producer<T, R>,
Arc<crate::AimDb<R>>,
Arc<dyn Any + Send + Sync>,
) -> BoxFuture<'static, ()>
+ Send,
>,
}