From 6f41efad0f12be13d27f7745ba59a50ef9924fba Mon Sep 17 00:00:00 2001 From: Christian Kamm Date: Tue, 21 Jun 2022 12:56:36 +0200 Subject: [PATCH] Health: helper for finding token info by index --- programs/mango-v4/src/state/health.rs | 22 ++++++++++------------ 1 file changed, 10 insertions(+), 12 deletions(-) diff --git a/programs/mango-v4/src/state/health.rs b/programs/mango-v4/src/state/health.rs index 489ac80b7..fa82fefba 100644 --- a/programs/mango-v4/src/state/health.rs +++ b/programs/mango-v4/src/state/health.rs @@ -455,6 +455,13 @@ fn compute_health_detail( ) -> Result { // token contribution from token accounts let mut token_infos = vec![]; + fn find_token_info_index(infos: &[TokenInfo], token_index: TokenIndex) -> Result { + infos + .iter() + .position(|ti| ti.token_index == token_index) + .ok_or_else(|| error!(MangoError::SomeError)) + } + for (i, position) in account.tokens.iter_active().enumerate() { let (bank, oracle_price) = retriever.bank_and_oracle(&account.group, i, position.token_index)?; @@ -488,14 +495,8 @@ fn compute_health_detail( } // find the TokenInfos for the market's base and quote tokens - let base_index = token_infos - .iter() - .position(|ti| ti.token_index == serum_account.base_token_index) - .ok_or_else(|| error!(MangoError::SomeError))?; - let quote_index = token_infos - .iter() - .position(|ti| ti.token_index == serum_account.quote_token_index) - .ok_or_else(|| error!(MangoError::SomeError))?; + let base_index = find_token_info_index(&token_infos, serum_account.base_token_index)?; + let quote_index = find_token_info_index(&token_infos, serum_account.quote_token_index)?; let (base_info, quote_info) = if base_index < quote_index { let (l, r) = token_infos.split_at_mut(quote_index); (&mut l[base_index], &mut r[0]) @@ -534,10 +535,7 @@ fn compute_health_detail( let perp_market = retriever.perp_market(&account.group, i, perp_account.market_index)?; // find the TokenInfos for the market's base and quote tokens - let base_index = token_infos - .iter() - .position(|ti| ti.token_index == perp_market.base_token_index) - .ok_or_else(|| error!(MangoError::SomeError))?; + let base_index = find_token_info_index(&token_infos, perp_market.base_token_index)?; let base_info = &token_infos[base_index]; let base_lot_size = I80F48::from(perp_market.base_lot_size);