use crate::node::{NodeContext, NodeType};
use crate::{message::Message, node::NodeError};
use schemars::{schema_for, JsonSchema};
use serde::{Deserialize, Serialize};
use schemars::schema::RootSchema;
use serde_json::json;
#[derive(Debug, Clone, Serialize, Deserialize, JsonSchema)]
#[serde(rename = "agent")]
pub struct AgentNode {
pub agent: String,
pub task: String,
}
impl AgentNode {
pub fn new<A: Into<String>, T: Into<String>>(agent: A, task: T) -> Self {
AgentNode {
agent: agent.into(),
task: task.into(),
}
}
}
#[typetag::serde]
impl NodeType for AgentNode {
fn type_name(&self) -> String {
self.agent.clone()
}
fn schema(&self) -> RootSchema {
schema_for!(AgentNode)
}
fn process(&self, input: Message, _context: &mut NodeContext) -> Result<Message, NodeError> {
let payload = json!({});
Ok(Message::new(&input.id(), payload, input.session_id()))
}
fn clone_box(&self) -> Box<dyn NodeType> {
Box::new(self.clone())
}
}