From e7bcf5f1d434b1d41c8c66065a4d7430371f0116 Mon Sep 17 00:00:00 2001 From: Lucas Colombo Date: Tue, 21 May 2024 02:36:34 -0300 Subject: [PATCH] =?UTF-8?q?fix:=20=F0=9F=9A=91=20Rustler:=20call=20on=5Fad?= =?UTF-8?q?d|/delete=20only=20when=20necessary?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/rustlers/rustler.rs | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) diff --git a/lib/rustlers/rustler.rs b/lib/rustlers/rustler.rs index 77d5955..de07dfa 100644 --- a/lib/rustlers/rustler.rs +++ b/lib/rustlers/rustler.rs @@ -303,6 +303,7 @@ pub trait Rustler: RustlerAccessor + Send + Sync { /// adds new tickers to the rustler async fn add(&mut self, new_tickers: &Vec) -> Result<()> { let tickers = self.tickers_mut(); + let mut added_tickers = vec![]; for new_ticker in new_tickers { // if the ticker already exists in the tickers map, skip it @@ -311,6 +312,7 @@ pub trait Rustler: RustlerAccessor + Send + Sync { } tickers.insert(new_ticker.key(), new_ticker.clone()); + added_tickers.push(new_ticker.clone()); } if self.opts().connect_on_add { @@ -320,16 +322,23 @@ pub trait Rustler: RustlerAccessor + Send + Sync { } } - self.on_add(new_tickers)?; + if !added_tickers.is_empty() { + self.on_add(&added_tickers)?; + } + Ok(()) } /// deletes tickers from the rustler async fn delete(&mut self, new_tickers: &Vec) -> Result<()> { let tickers = self.tickers_mut(); + let mut removed_tickers = vec![]; for new_ticker in new_tickers { - tickers.remove(&new_ticker.key()); + let removed_ticker = tickers.remove(&new_ticker.key()); + if let Some(removed_ticker) = removed_ticker { + removed_tickers.push(removed_ticker); + } } // if after deleting the tickers the tickers map is @@ -338,7 +347,10 @@ pub trait Rustler: RustlerAccessor + Send + Sync { self.disconnect().await?; } - self.on_delete(new_tickers)?; + if !removed_tickers.is_empty() { + self.on_delete(&removed_tickers)?; + } + Ok(()) } }