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, Value};
#[derive(Debug, Clone, Serialize, Deserialize, JsonSchema)]
#[serde(rename = "process")]
pub struct ProcessNode {
pub name: String,
pub args: Value,
}
impl ProcessNode {
pub fn new<N: Into<String>,A: Into<Value>>(name: N, args: A, ) -> Self {
ProcessNode {
name: name.into(),
args: args.into(),
}
}
}
#[typetag::serde]
impl NodeType for ProcessNode {
fn type_name(&self) -> String {
self.name.clone()
}
fn schema(&self) -> RootSchema {
schema_for!(ProcessNode)
}
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())
}
}