use codeuchain::core::context::Context;
use codeuchain::core::link::LegacyLink;
use codeuchain::core::middleware::Middleware;
use codeuchain::core::chain::Chain;
pub struct BasicChain {
chain: Chain,
}
impl BasicChain {
pub fn new() -> Self {
Self {
chain: Chain::new(),
}
}
pub fn add_link(&mut self, name: String, link: Box<dyn LegacyLink>) {
self.chain.add_link(name, link);
}
pub fn connect<F>(&mut self, source: String, target: String, condition: F)
where
F: Fn(&Context) -> bool + Send + Sync + 'static,
{
self.chain.connect(source, target, condition);
}
pub fn use_middleware(&mut self, middleware: Box<dyn Middleware>) {
self.chain.use_middleware(middleware);
}
pub async fn run(&self, initial_ctx: Context) -> Result<Context, Box<dyn std::error::Error + Send + Sync>> {
self.chain.run(initial_ctx).await
}
pub fn chain(&self) -> &Chain {
&self.chain
}
}
impl Default for BasicChain {
fn default() -> Self {
Self::new()
}
}