Files
rust_bifrost/examples/z2mdump.rs
Beyhan Oğur 427856cd3a first commit
2026-04-26 22:29:38 +03:00

57 lines
1.2 KiB
Rust

use clap::Parser;
use futures::StreamExt;
use hyper::Uri;
use serde::Deserialize;
use tokio_tungstenite::{connect_async, tungstenite::Message};
use bifrost::error::ApiResult;
#[derive(Parser, Debug)]
struct Args {
/// Url to websocket (example: <ws://example.org:8080/>)
url: Uri,
}
#[derive(Debug, Deserialize)]
struct Z2mMessage {
topic: String,
}
#[tokio::main]
async fn main() -> ApiResult<()> {
pretty_env_logger::formatted_builder()
.filter_level(log::LevelFilter::Debug)
.parse_default_env()
.init();
let args = match Args::try_parse() {
Ok(args) => args,
Err(err) => {
log::error!("Argument error: {err}");
std::process::exit(1);
}
};
let (mut socket, _) = connect_async(args.url).await?;
loop {
let Some(pkt) = socket.next().await else {
break;
};
let Message::Text(txt) = pkt? else { break };
let json: Z2mMessage = serde_json::from_str(&txt)?;
if json.topic.starts_with("bridge/") {
log::info!("Got message [{}]", json.topic);
println!("{txt}");
} else {
log::info!("No more z2m bridge messages");
break;
}
}
Ok(())
}