File tree 1 file changed +56
-0
lines changed
1 file changed +56
-0
lines changed Original file line number Diff line number Diff line change
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
+ }
You can’t perform that action at this time.
0 commit comments