From 8cd76bee92c36d63a0c6505611ab095a0ca7d7e2 Mon Sep 17 00:00:00 2001 From: Damien Elmes Date: Sun, 16 Feb 2020 19:03:27 +1000 Subject: [PATCH] wrap i18n struct in a shared mutex so we can start caching --- rslib/src/i18n/mod.rs | 33 +++++++++++++++++++++++---------- 1 file changed, 23 insertions(+), 10 deletions(-) diff --git a/rslib/src/i18n/mod.rs b/rslib/src/i18n/mod.rs index bf9fa3bf1..dd48afdef 100644 --- a/rslib/src/i18n/mod.rs +++ b/rslib/src/i18n/mod.rs @@ -25,6 +25,7 @@ macro_rules! tr_strs { } }; } +use std::sync::{Arc, Mutex}; pub use tr_strs; /// All languages we (currently) support, excluding the fallback @@ -109,13 +110,9 @@ fn get_bundle( Some(bundle) } +#[derive(Clone)] pub struct I18n { - // language identifiers, used for date/time rendering - langs: Vec, - // languages supported by us - supported: Vec, - - locale_folder: PathBuf, + inner: Arc>, } impl I18n { @@ -134,17 +131,33 @@ impl I18n { langs.push("en_US".parse().unwrap()); Self { - langs, - supported, - locale_folder: locale_folder.into(), + inner: Arc::new(Mutex::new(I18nInner { + langs, + supported, + locale_folder: locale_folder.into(), + })), } } pub fn get(&self, group: StringsGroup) -> I18nCategory { - I18nCategory::new(&*self.langs, &*self.supported, group, &self.locale_folder) + let inner = self.inner.lock().unwrap(); + I18nCategory::new( + &*inner.langs, + &*inner.supported, + group, + &inner.locale_folder, + ) } } +struct I18nInner { + // language identifiers, used for date/time rendering + langs: Vec, + // languages supported by us + supported: Vec, + locale_folder: PathBuf, +} + pub struct I18nCategory { // bundles in preferred language order, with fallback English as the // last element