Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- use serde::{Deserialize, Serialize};
- use serde_json::json;
- use tungstenite::{connect, Message};
- use url::Url;
- #[derive(Serialize, Deserialize, Debug)]
- enum Data {
- None,
- Trade(Trade),
- }
- #[derive(Serialize, Deserialize, Debug)]
- struct Msg {
- channel: String,
- event: String,
- #[serde(flatten)]
- data: Data,
- }
- #[derive(Serialize, Deserialize, Debug)]
- struct Trade {
- id: u32,
- amount: f32,
- amount_str: String,
- buy_order_id: u64,
- microtimestamp: String,
- price: f32,
- price_str: String,
- sell_order_id: u64,
- timestamp: String,
- #[serde(rename = "type")]
- _type: u8,
- }
- fn main() {
- let (mut socket, _response) =
- connect(Url::parse("wss://ws.bitstamp.net").unwrap()).expect("Can't connect");
- socket
- .write_message(
- Message::Text(
- json!({
- "event": "bts:subscribe",
- "data": {
- "channel": "live_trades_btcusd"
- }
- })
- .to_string(),
- )
- .into(),
- )
- .expect("Error sending message");
- loop {
- let msg = socket.read_message().expect("Error reading message");
- println!("***> {}", msg);
- let result: Result<Msg, serde_json::Error> = serde_json::from_str(msg.to_text().unwrap());
- let _value = match result {
- Ok(msg) => {
- println!("---> {:?}", msg);
- }
- Err(err) => {
- println!("===> {:?}", err);
- continue;
- }
- };
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement