Files
msghandler/examples/smartsend_example.rs
2026-05-15 11:55:41 +07:00

71 lines
2.4 KiB
Rust

use msghandler::{smartsend, Payload, SmartsendOptions};
#[tokio::main]
async fn main() {
// Create mixed payload data
let payloads = vec![
(
"message".to_string(),
Payload::Text("Hello from Rust!".to_string()),
"text".to_string(),
),
(
"user_data".to_string(),
Payload::Dictionary(serde_json::json!({
"name": "Alice",
"role": "admin",
"scores": [95, 88, 92]
})),
"dictionary".to_string(),
),
(
"avatar".to_string(),
Payload::Binary(vec![0x89, 0x50, 0x4E, 0x47]), // PNG header
"image".to_string(),
),
];
let options = SmartsendOptions {
broker_url: "localhost:4222".to_string(),
fileserver_url: "http://localhost:8080".to_string(),
msg_purpose: "chat".to_string(),
sender_name: "rust-example".to_string(),
..Default::default()
};
match smartsend("/agent/wine/api/v1/prompt", &payloads, &options).await {
Ok((envelope, json_str)) => {
println!("=== Envelope Created ===");
println!("Correlation ID: {}", envelope.correlation_id);
println!("Message ID: {}", envelope.msg_id);
println!("Timestamp: {}", envelope.timestamp);
println!("Subject: {}", envelope.send_to);
println!("Purpose: {}", envelope.msg_purpose);
println!("Sender: {}", envelope.sender_name);
println!("Payloads: {}", envelope.payloads.len());
println!();
for payload in &envelope.payloads {
println!("Payload: {} (type: {}, transport: {}, encoding: {})",
payload.dataname,
payload.payload_type,
payload.transport,
payload.encoding);
println!(" Size: {} bytes", payload.size);
println!(" Data: {}", if payload.transport == "direct" {
&payload.data[..payload.data.len().min(40)]
} else {
&payload.data[..payload.data.len().min(60)]
});
}
println!();
println!("=== JSON String for Transport Publishing ===");
println!("{}", json_str);
}
Err(e) => {
eprintln!("Error: {}", e);
}
}
}