use relaycast::{CreateAgentRequest, CreateChannelRequest, RelayCast, RelayCastOptions, WsEvent};
use std::env;
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
let api_key = env::var("RELAYCAST_API_KEY").expect("RELAYCAST_API_KEY must be set");
println!("Creating RelayCast client...");
let relay = RelayCast::new(RelayCastOptions::new(api_key))?;
let workspace = relay.workspace_info().await?;
println!("Connected to workspace: {}", workspace.name);
let stats = relay.stats().await?;
println!(
"Workspace has {} agents ({} online), {} messages",
stats.agents.total, stats.agents.online, stats.messages.total
);
let agent_response = relay
.register_or_get_agent(CreateAgentRequest {
name: "rust-example-agent".to_string(),
persona: Some("Example agent from Rust SDK".to_string()),
agent_type: Some("agent".to_string()),
metadata: None,
})
.await?;
println!("Agent registered: {}", agent_response.name);
let mut agent = relay.as_agent(&agent_response.token)?;
let channels = agent.list_channels(false).await?;
println!("Found {} channels", channels.len());
let channel_name = "sdk-rust-test";
if !channels.iter().any(|c| c.name == channel_name) {
agent
.create_channel(CreateChannelRequest {
name: channel_name.to_string(),
topic: Some("Test channel for Rust SDK".to_string()),
metadata: None,
})
.await?;
println!("Created channel: #{}", channel_name);
}
agent.join_channel(channel_name).await?;
let message = agent
.send(channel_name, "Hello from Rust SDK! 🦀", None, None, None)
.await?;
println!("Sent message: {}", message.id);
agent.react(&message.id, "rust").await?;
println!("Added reaction");
let messages = agent.messages(channel_name, None).await?;
println!("Channel has {} messages", messages.len());
println!("Connecting to WebSocket...");
agent.connect().await?;
agent
.subscribe_channels(vec![channel_name.to_string()])
.await?;
let mut events = agent.subscribe_events()?;
println!("Listening for events (Ctrl+C to stop)...");
let mut event_count = 0;
while let Ok(event) = events.recv().await {
match event {
WsEvent::MessageCreated(e) => {
println!("📨 New message in #{}: {}", e.channel, e.message.text);
}
WsEvent::ReactionAdded(e) => {
println!("👍 Reaction added: {} on message {}", e.emoji, e.message_id);
}
WsEvent::AgentOnline(e) => {
println!("🟢 Agent online: {}", e.agent.name);
}
WsEvent::AgentOffline(e) => {
println!("🔴 Agent offline: {}", e.agent.name);
}
WsEvent::Pong => {
}
_ => {
println!("📩 Event: {:?}", event);
}
}
event_count += 1;
if event_count >= 5 {
println!("Received 5 events, disconnecting...");
break;
}
}
agent.disconnect().await;
println!("Disconnected. Done!");
Ok(())
}