From ae76794709267b9ca32d725b1f005669f1cc0503 Mon Sep 17 00:00:00 2001 From: Pavel Kirilin <win10@list.ru> Date: Sun, 26 Feb 2023 03:23:34 +0400 Subject: [PATCH] Fixed convertion repetitions. Signed-off-by: Pavel Kirilin <win10@list.ru> --- src/bot/handlers/basic/currency_converter.rs | 33 +++++++++++++++----- 1 file changed, 25 insertions(+), 8 deletions(-) diff --git a/src/bot/handlers/basic/currency_converter.rs b/src/bot/handlers/basic/currency_converter.rs index 76ded65..5acfc21 100644 --- a/src/bot/handlers/basic/currency_converter.rs +++ b/src/bot/handlers/basic/currency_converter.rs @@ -1,4 +1,7 @@ -use std::{collections::HashMap, time::Duration}; +use std::{ + collections::{HashMap, HashSet}, + time::Duration, +}; use grammers_client::{Client, InputMessage, Update}; use regex::Regex; @@ -131,6 +134,7 @@ impl Handler for CurrencyConverter { let mut calucates = Vec::new(); + let mut mapped = HashSet::new(); for capture in CUR_REGEX.captures_iter(message.text()) { // We parse supplied value from message let Some(num_value) = capture @@ -149,25 +153,38 @@ impl Handler for CurrencyConverter { .or(cur_name) else{ continue; }; + let fingerprint = format!("{num_value:.5} {cur_name}"); + // Check if we already processed this value. + if mapped.contains(&fingerprint) { + continue; + } + // Add a value to not calculate it again. + mapped.insert(fingerprint); + // Now we want to know current nominal for this value. let Some(nominal) = valutes + // We search for it using cur_name. .get(cur_name) .and_then(|info| info.get("Nominal")) .map(ToString::to_string) .and_then(|value| value.as_str().parse::<f64>().ok()) + // If the name cannot be found, we continue. else{ continue; }; - let calculated = valutes + // Now we want to know multiplier. + let Some(multiplier) = valutes .get(cur_name) .and_then(|info| info.get("Value")) .map(ToString::to_string) .and_then(|value| value.as_str().parse::<f64>().ok()) - .map(|multiplier| multiplier * num_value / nominal); - if let Some(value) = calculated { - calucates.push(format!( - "<pre>{num_value} {cur_name} = {value:.2} RUB</pre><br>" - )); - } + else{ + continue; + }; + + calucates.push(format!( + "<pre>{num_value} {cur_name} = {value:.2} RUB</pre><br>", + value = multiplier * num_value / nominal, + )); } if !calucates.is_empty() { -- GitLab