From d64c2976e3b1bbba28bcefce3b8a379bc67bf07b Mon Sep 17 00:00:00 2001 From: teor Date: Thu, 26 Nov 2020 11:56:57 +1000 Subject: [PATCH] Rewrite iterator processing using unzip Co-authored-by: Jane Lusby --- zebra-state/src/service/check/difficulty.rs | 16 +++++----------- 1 file changed, 5 insertions(+), 11 deletions(-) diff --git a/zebra-state/src/service/check/difficulty.rs b/zebra-state/src/service/check/difficulty.rs index e9d212f4..74153b0e 100644 --- a/zebra-state/src/service/check/difficulty.rs +++ b/zebra-state/src/service/check/difficulty.rs @@ -115,21 +115,15 @@ impl AdjustedDifficulty { { let candidate_height = (previous_block_height + 1).expect("next block height is valid"); - // unzip would be a lot nicer here, but we can't satisfy its trait bounds - let context: Vec<_> = context + let (relevant_difficulty_thresholds, relevant_times) = context .into_iter() .take(POW_AVERAGING_WINDOW + POW_MEDIAN_BLOCK_SPAN) - .collect(); - let relevant_difficulty_thresholds = context - .iter() - .map(|pair| pair.0) - .collect::>() + .unzip::<_, _, Vec<_>, Vec<_>>(); + + let relevant_difficulty_thresholds = relevant_difficulty_thresholds .try_into() .expect("not enough context: difficulty adjustment needs at least 28 (PoWAveragingWindow + PoWMedianBlockSpan) headers"); - let relevant_times = context - .iter() - .map(|pair| pair.1) - .collect::>() + let relevant_times = relevant_times .try_into() .expect("not enough context: difficulty adjustment needs at least 28 (PoWAveragingWindow + PoWMedianBlockSpan) headers");