use langgraph::prelude::*;
use langgraph_derive::langgraph_state;
use langgraph_prebuilt::Message;
#[langgraph_state]
#[derive(Debug)]
struct AgentState {
#[channel(messages)]
messages: Vec<Message>,
step_count: i64, }
async fn agent(_input: JsonValue, _config: RunnableConfig) -> Result<JsonValue, RunnableError> {
Ok(serde_json::json!({
"messages": [{"type": "ai", "content": "Hello from the agent!"}],
"step_count": 1
}))
}
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
println!("========================================");
println!(" StateGraph Derive Macro Example");
println!("========================================\n");
let channels = AgentState::create_channels();
let mut graph = StateGraph::new(channels);
graph.add_node("agent", agent)?;
graph.add_edge(START, "agent")?;
graph.add_edge("agent", END)?;
let compiled = graph.compile()?;
let result = compiled.ainvoke(
&serde_json::json!({"step_count": 0}),
&RunnableConfig::new(),
).await?;
println!("Result:");
println!("{}", serde_json::to_string_pretty(&result)?);
Ok(())
}