Async client for the Kite Connect WebSocket API
0
fork

Configure Feed

Select the types of activity you want to include in your feed.

refactor: unsubscribe tokens in KiteTickerSubscriber

This commit refactors the `unsubscribe_tokens` method in the `KiteTickerSubscriber` struct. Instead of directly unsubscribing the tokens and updating the `subscribed_tokens` field, it now uses a match statement to handle the result of the `unsubscribe_cmd` method. If the unsubscribe is successful, the tokens are removed from the `subscribed_tokens` using the `retain` method. If there is an error, it is returned.

The code changes in this commit ensure that the `subscribed_tokens` field is updated correctly when unsubscribing tokens.

Co-authored-by: Kaushik Chakraborty <git@kaushikc.org>

Note: Commit message is generated by AI. Please use with caution.

authored by

SPRAGE
Kaushik Chakraborty
and committed by
Kaushik Chakraborty
be3083be 54ba1c46

+66 -1
+7 -1
src/ticker.rs
··· 194 194 instrument_tokens: &[u32], 195 195 ) -> Result<(), String> { 196 196 let tokens = self.get_subscribed_or(instrument_tokens); 197 - self.ticker.unsubscribe_cmd(tokens.as_slice()).await 197 + match self.ticker.unsubscribe_cmd(tokens.as_slice()).await{ 198 + Ok(_) => { 199 + self.subscribed_tokens.retain(|k, _| !tokens.contains(k)); 200 + Ok(()) 201 + }, 202 + Err(e) => Err(e) 203 + } 198 204 } 199 205 200 206 /// Get the next message from the server, waiting if necessary.
+59
tests/ticker_test.rs
··· 166 166 .await 167 167 .unwrap(); 168 168 } 169 + 170 + 171 + #[tokio::test] 172 + async fn test_removal_from_subscribed() { 173 + // create a ticker 174 + let api_key = std::env::var("KITE_API_KEY").unwrap(); 175 + let access_token = std::env::var("KITE_ACCESS_TOKEN").unwrap(); 176 + let ticker = KiteTickerAsync::connect(&api_key, &access_token).await; 177 + 178 + let ticker = ticker.unwrap(); 179 + let token = [94977,256265,260105]; // bata,NIFTY 50 180 + let mode = Mode::Full; 181 + let mut sb = ticker 182 + .subscribe(&token, Some(mode.clone())) 183 + .await 184 + .unwrap(); 185 + 186 + let mut loop_cnt = 0; 187 + 188 + loop { 189 + match sb.next_message().await { 190 + Ok(message) => match message { 191 + Some(TickerMessage::Ticks(xs)) => { 192 + if xs.len() == 0 { 193 + if loop_cnt > 4 { 194 + assert!(true); 195 + break; 196 + } else { 197 + loop_cnt += 1; 198 + continue; 199 + } 200 + } 201 + assert_eq!(xs.len(), 1); 202 + let subscribed = sb.get_subscribed(); 203 + assert_eq!(subscribed, token); 204 + sb.unsubscribe(&[260105]).await.unwrap(); 205 + let subscribed = sb.get_subscribed(); 206 + assert_eq!(subscribed, [94977,256265]); 207 + sb.unsubscribe(&[]).await.unwrap(); 208 + let subscribed = sb.get_subscribed(); 209 + assert_eq!(subscribed, vec![0; 0]); 210 + loop_cnt += 1; 211 + if loop_cnt > 5 { 212 + assert!(false); 213 + break; 214 + } 215 + } 216 + _ => { 217 + continue; 218 + } 219 + }, 220 + _ => { 221 + assert!(false); 222 + break; 223 + } 224 + } 225 + } 226 + sb.close().await.unwrap(); 227 + }