use anyhow::Result;
use async_trait::async_trait;
use crate::types::{GraphState, StreamEvent};
use tokio::sync::mpsc;
pub type EventSender = mpsc::Sender<StreamEvent>;
#[async_trait]
pub trait Node: Send + Sync {
async fn execute(&self, state: &mut GraphState, event_tx: EventSender) -> Result<()>;
fn node_type(&self) -> NodeType;
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
pub enum NodeType {
LLM,
Tool,
}