From 7eacb6b57efaa3195595199c7a51115d00f69a88 Mon Sep 17 00:00:00 2001 From: Mark Sinclair Date: Wed, 6 Oct 2021 20:45:39 +0100 Subject: [PATCH] Add TTL to location cache --- explorer-api/src/mix_nodes/mod.rs | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/explorer-api/src/mix_nodes/mod.rs b/explorer-api/src/mix_nodes/mod.rs index 7952c7b0b0..e4aede3fd9 100644 --- a/explorer-api/src/mix_nodes/mod.rs +++ b/explorer-api/src/mix_nodes/mod.rs @@ -15,7 +15,7 @@ use network_defaults::{ }; use validator_client::nymd::QueryNymdClient; -pub(crate) type LocationCache = HashMap; +pub(crate) type LocationCache = HashMap; #[derive(Debug, Deserialize)] pub(crate) struct GeoLocation { @@ -32,6 +32,12 @@ pub(crate) struct GeoLocation { pub(crate) metro_code: u32, } +#[derive(Clone, Debug, Serialize, Deserialize)] +pub(crate) struct LocationCacheItem { + pub(crate) location: Option, + pub(crate) valid_until: SystemTime, +} + #[derive(Clone, Debug, JsonSchema, Serialize, Deserialize)] pub(crate) struct Location { pub(crate) two_letter_iso_country_code: String, @@ -54,12 +60,19 @@ impl Location { } } +impl LocationCacheItem { + pub(crate) fn new_from_location(location: Option) -> Self { + LocationCacheItem { + location, + valid_until: SystemTime::now() + Duration::from_secs(60 * 60 * 24), // valid for 1 day + } + } } #[derive(Clone, Debug)] pub(crate) struct MixNodesResult { pub(crate) valid_until: SystemTime, - pub(crate) value: HashMap, + pub(crate) value: HashMap, location_cache: LocationCache, }