use tokio::task::JoinHandle;
use crate::{
cache::Cache,
error::ComponentError,
types::{ComponentInput, ComponentOutput},
};
pub trait IComponent<TMessage> {
fn set_input(&mut self, input: ComponentInput<TMessage>);
fn set_output(&mut self, output: ComponentOutput<TMessage>);
fn set_cache(&mut self, cache: Cache<TMessage>);
fn spawn(&mut self) -> Result<JoinHandle<Result<(), ComponentError>>, ComponentError>;
fn set_and_spawn(
&mut self,
input: ComponentInput<TMessage>,
output: ComponentOutput<TMessage>,
) -> Result<JoinHandle<Result<(), ComponentError>>, ComponentError> {
self.set_input(input);
self.set_output(output);
self.spawn()
}
}