Advertisement
Guest User

Untitled

a guest
Feb 6th, 2022
102
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Rust 1.65 KB | None | 0 0
  1. use serde::{Deserialize, Serialize};
  2. use serde_json::json;
  3. use tungstenite::{connect, Message};
  4. use url::Url;
  5.  
  6. #[derive(Serialize, Deserialize, Debug)]
  7. enum Data {
  8.     None,
  9.     Trade(Trade),
  10. }
  11.  
  12. #[derive(Serialize, Deserialize, Debug)]
  13. struct Msg {
  14.     channel: String,
  15.     event: String,
  16.  
  17.     #[serde(flatten)]
  18.     data: Data,
  19. }
  20.  
  21.  
  22. #[derive(Serialize, Deserialize, Debug)]
  23. struct Trade {
  24.     id: u32,
  25.     amount: f32,
  26.     amount_str: String,
  27.     buy_order_id: u64,
  28.     microtimestamp: String,
  29.     price: f32,
  30.     price_str: String,
  31.     sell_order_id: u64,
  32.     timestamp: String,
  33.     #[serde(rename = "type")]
  34.     _type: u8,
  35. }
  36.  
  37. fn main() {
  38.     let (mut socket, _response) =
  39.         connect(Url::parse("wss://ws.bitstamp.net").unwrap()).expect("Can't connect");
  40.  
  41.     socket
  42.         .write_message(
  43.             Message::Text(
  44.                 json!({
  45.                     "event": "bts:subscribe",
  46.                     "data": {
  47.                         "channel": "live_trades_btcusd"
  48.                     }
  49.                 })
  50.                 .to_string(),
  51.             )
  52.             .into(),
  53.         )
  54.         .expect("Error sending message");
  55.  
  56.     loop {
  57.         let msg = socket.read_message().expect("Error reading message");
  58.         println!("***> {}", msg);
  59.         let result: Result<Msg, serde_json::Error> = serde_json::from_str(msg.to_text().unwrap());
  60.        
  61.         let _value = match result {
  62.             Ok(msg) => {
  63.                 println!("---> {:?}", msg);
  64.             }
  65.             Err(err) => {
  66.                 println!("===> {:?}", err);
  67.                 continue;
  68.             }
  69.         };
  70.        
  71.     }
  72. }
  73.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement