fix: 🚑 Rustler: call on_add|/delete only when necessary
This commit is contained in:
parent
da106443ee
commit
e7bcf5f1d4
@ -303,6 +303,7 @@ pub trait Rustler: RustlerAccessor + Send + Sync {
|
|||||||
/// adds new tickers to the rustler
|
/// adds new tickers to the rustler
|
||||||
async fn add(&mut self, new_tickers: &Vec<Ticker>) -> Result<()> {
|
async fn add(&mut self, new_tickers: &Vec<Ticker>) -> Result<()> {
|
||||||
let tickers = self.tickers_mut();
|
let tickers = self.tickers_mut();
|
||||||
|
let mut added_tickers = vec![];
|
||||||
|
|
||||||
for new_ticker in new_tickers {
|
for new_ticker in new_tickers {
|
||||||
// if the ticker already exists in the tickers map, skip it
|
// 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());
|
tickers.insert(new_ticker.key(), new_ticker.clone());
|
||||||
|
added_tickers.push(new_ticker.clone());
|
||||||
}
|
}
|
||||||
|
|
||||||
if self.opts().connect_on_add {
|
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(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
||||||
/// deletes tickers from the rustler
|
/// deletes tickers from the rustler
|
||||||
async fn delete(&mut self, new_tickers: &Vec<Ticker>) -> Result<()> {
|
async fn delete(&mut self, new_tickers: &Vec<Ticker>) -> Result<()> {
|
||||||
let tickers = self.tickers_mut();
|
let tickers = self.tickers_mut();
|
||||||
|
let mut removed_tickers = vec![];
|
||||||
|
|
||||||
for new_ticker in new_tickers {
|
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
|
// if after deleting the tickers the tickers map is
|
||||||
@ -338,7 +347,10 @@ pub trait Rustler: RustlerAccessor + Send + Sync {
|
|||||||
self.disconnect().await?;
|
self.disconnect().await?;
|
||||||
}
|
}
|
||||||
|
|
||||||
self.on_delete(new_tickers)?;
|
if !removed_tickers.is_empty() {
|
||||||
|
self.on_delete(&removed_tickers)?;
|
||||||
|
}
|
||||||
|
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user