use std::{
any::{Any, TypeId},
pin::Pin,
sync::Arc,
};
pub(crate) type Payload = Box<dyn Any + Send>;
type BoxFuture<'a, T> = Pin<Box<dyn Future<Output = T> + Send + 'a>>;
#[derive(Clone)]
#[allow(clippy::type_complexity)]
pub struct Node<C, E> {
pub name: &'static str,
pub id: TypeId,
pub deps: Vec<TypeId>,
#[doc(hidden)]
pub prepare: Arc<dyn Fn(Vec<&Payload>) -> Payload + Send + Sync + 'static>,
#[doc(hidden)]
pub execute:
Arc<dyn Fn(C, Payload) -> BoxFuture<'static, Result<Payload, E>> + Send + Sync + 'static>,
}
pub trait NodeBuilder<C, E> {
fn node() -> Node<C, E>;
}