# rs-crypto-com-exchange This is an unofficial websocket library for the crypto com exchange websocket api https://exchange-docs.crypto.com/spot/index.html#websocket-root-endpoints Library doc is available at https://docs.rs/crypto-com-exchange/latest/crypto_com_exchange/ Basically, there two kind of clients: `MarketClient` and `UserClient`. The `MarketClient` is used to get global market information for example for monitoring. The `UserClient` needs authentication and it is used for create orders, check balance and all things related to the user. This is an example of `MarketClient` ```rust use tokio::time::{sleep, Duration}; use crypto_com_exchange::{MarketClient, MarketSubscribeResponse, MarketSubscribeResult}; #[tokio::main] async fn main() { let (client, event_receiver) = MarketClient::new().await.unwrap(); //Documentations says that it is recommented to wait one second before start sending messages sleep(Duration::from_secs(1)).await; // One of every type of message. You can put as many you want. Check the documentation for more details let channels = vec![ "trade.ETH_CRO".to_string(), "candlestick.1h.ETH_CRO".to_string(), "ticker.ETH_CRO".to_string(), "book.ETH_CRO.150".to_string(), ]; println!("Subscribing to {:?}", channels); client.subscribe(channels).await.unwrap(); println!("Ready"); loop { match event_receiver.recv_async().await { Ok(message) => { match message { MarketSubscribeResponse::Confirmation{id, code} => { if code == 0 { println!("Sub {} OK", id); } else { println!("Sub {} fail with code {}", id, code); } }, MarketSubscribeResponse::Result{result} => { match result { MarketSubscribeResult::TradeResult(result) => { println!("Trade: {:?}", result); }, MarketSubscribeResult::CandlestickResult(result) => { println!("Candlestick: {:?}", result); }, MarketSubscribeResult::TickerResult(result) => { println!("Ticker: {:?}", result); }, MarketSubscribeResult::BookResult(result) => { println!("Book: {:?}", result); }, } } } }, Err(err) => { println!("Error when receiving a message: {}", err) } } } } ``` This is an example `UserClient`. It is currently being developed but at least, you can do the authentication and get the balance ```rust use tokio::time::{sleep, Duration}; use crypto_com_exchange::{UserClient, UserSubscribeResponse, UserSubscribeResult}; #[tokio::main] async fn main() { let (client, event_receiver) = UserClient::new("api_key".to_string(), "api_secret".to_string()).await.unwrap(); //Documentations says that it is recommented to wait one second before start sending messages sleep(Duration::from_secs(1)).await; // One of every type of message. You can put as many you want. Check the documentation for more details let channels = vec![ "trade.ETH_CRO".to_string(), "candlestick.1h.ETH_CRO".to_string(), "ticker.ETH_CRO".to_string(), "book.ETH_CRO.150".to_string(), ]; println!("Subscribing to {:?}", channels); client.subscribe(channels).await.unwrap(); println!("Ready"); loop { match event_receiver.recv_async().await { Ok(message) => { match message { UserSubscribeResponse::Auth{id, code} => { if code == 0 { println!("Auth {} OK", id); } else { println!("Auth {} fail with code {}", id, code); } } UserSubscribeResponse::Confirmation{id, code} => { if code == 0 { println!("Sub {} OK", id); } else { println!("Sub {} fail with code {}", id, code); } }, UserSubscribeResponse::Result{result} => { match result { UserSubscribeResult::BalanceResult(result) => { println!("Trade: {:?}", result); }, } } } }, Err(err) => { println!("Error when receiving a message: {}", err) } } } } ```