fluent_bundle/
concurrent.rs1use intl_memoizer::{concurrent::IntlLangMemoizer, Memoizable};
2use rustc_hash::FxHashMap;
3use unic_langid::LanguageIdentifier;
4
5use crate::memoizer::MemoizerKind;
6use crate::types::FluentType;
7
8pub type FluentBundle<R> = crate::bundle::FluentBundle<R, IntlLangMemoizer>;
16
17impl<R> FluentBundle<R> {
18 pub fn new_concurrent(locales: Vec<LanguageIdentifier>) -> Self {
33 let first_locale = locales.get(0).cloned().unwrap_or_default();
34 Self {
35 locales,
36 resources: vec![],
37 entries: FxHashMap::default(),
38 intls: IntlLangMemoizer::new(first_locale),
39 use_isolating: true,
40 transform: None,
41 formatter: None,
42 }
43 }
44}
45
46impl MemoizerKind for IntlLangMemoizer {
47 fn new(lang: LanguageIdentifier) -> Self
48 where
49 Self: Sized,
50 {
51 Self::new(lang)
52 }
53
54 fn with_try_get_threadsafe<I, R, U>(&self, args: I::Args, cb: U) -> Result<R, I::Error>
55 where
56 Self: Sized,
57 I: Memoizable + Send + Sync + 'static,
58 I::Args: Send + Sync + 'static,
59 U: FnOnce(&I) -> R,
60 {
61 self.with_try_get(args, cb)
62 }
63
64 fn stringify_value(&self, value: &dyn FluentType) -> std::borrow::Cow<'static, str> {
65 value.as_string_threadsafe(self)
66 }
67}