Skip to content

Commit 0f339be

Browse files
authored
Merge pull request #11 from chrivers/chrivers/z2mdump
Added z2mdump example, to make it easier to gather debug info
2 parents 490b9c3 + c0cedf7 commit 0f339be

File tree

1 file changed

+56
-0
lines changed

1 file changed

+56
-0
lines changed

examples/z2mdump.rs

+56
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
use clap::Parser;
2+
use futures::StreamExt;
3+
use hyper::Uri;
4+
use serde::Deserialize;
5+
use tokio_tungstenite::{connect_async, tungstenite::Message};
6+
7+
use bifrost::error::ApiResult;
8+
9+
#[derive(Parser, Debug)]
10+
struct Args {
11+
/// Url to websocket (example: ws://example.org:8080/)
12+
url: Uri,
13+
}
14+
15+
#[derive(Debug, Deserialize)]
16+
struct Z2mMessage {
17+
topic: String,
18+
}
19+
20+
#[tokio::main]
21+
async fn main() -> ApiResult<()> {
22+
pretty_env_logger::formatted_builder()
23+
.filter_level(log::LevelFilter::Debug)
24+
.parse_default_env()
25+
.init();
26+
27+
let args = match Args::try_parse() {
28+
Ok(args) => args,
29+
Err(err) => {
30+
log::error!("Argument error: {err}");
31+
std::process::exit(1);
32+
}
33+
};
34+
35+
let (mut socket, _) = connect_async(args.url).await?;
36+
37+
loop {
38+
let Some(pkt) = socket.next().await else {
39+
break;
40+
};
41+
42+
let Message::Text(txt) = pkt? else { break };
43+
44+
let json: Z2mMessage = serde_json::from_str(&txt)?;
45+
46+
if json.topic.starts_with("bridge/") {
47+
log::info!("Got message [{}]", json.topic);
48+
println!("{}", txt);
49+
} else {
50+
log::info!("No more z2m bridge messages");
51+
break;
52+
}
53+
}
54+
55+
Ok(())
56+
}

0 commit comments

Comments
 (0)