use nats;
use ppdioo::get_sdn_data;
use serde_json::json;
use std::env;
async fn send_data_to_nats(url: &str, subject: &str, data: serde_json::Value) -> Result<(), Box<dyn std::error::Error>> {
let nc = nats::connect(url)?;
let data_str = data.to_string();
nc.publish(subject, &data_str.as_bytes())?;
println!("Netplan send to NATS.IO: {}", data_str);
Ok(())
}
#[tokio::main]
async fn main() {
let args: Vec<String> = env::args().collect();
let url = if args.len() > 1 { Some(&args[1]) } else { None };
let username = "admin"; let password = "admin";
let switch_data = get_sdn_data(url.map(|x| x.as_str()), username, password).await;
println!("get Topology: {:?}", switch_data);
let data_to_send = json!({
"backbone": switch_data.backbone,
"spine": switch_data.spine,
"access": switch_data.access
});
let nats_url = "nats://localhost:4222"; let subject = "network.topology";
if let Err(e) = send_data_to_nats(nats_url, subject, data_to_send).await {
eprintln!("Topology could not be sent: {}", e);
}
}