fix: 🚑 Rustler: call on_add|/delete only when necessary

This commit is contained in:
Lucas Colombo 2024-05-21 02:36:34 -03:00
parent da106443ee
commit e7bcf5f1d4
Signed by: lucas
GPG Key ID: EF34786CFEFFAE35

View File

@ -303,6 +303,7 @@ pub trait Rustler: RustlerAccessor + Send + Sync {
/// adds new tickers to the rustler
async fn add(&mut self, new_tickers: &Vec<Ticker>) -> 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<Ticker>) -> 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(())
}
}