fluent_bundle/memoizer.rs
1use crate::types::FluentType;
2use intl_memoizer::Memoizable;
3use unic_langid::LanguageIdentifier;
4
5/// This trait contains thread-safe methods which extend [intl_memoizer::IntlLangMemoizer].
6/// It is used as the generic bound in this crate when a memoizer is needed.
7pub trait MemoizerKind: 'static {
8 fn new(lang: LanguageIdentifier) -> Self
9 where
10 Self: Sized;
11
12 /// A threadsafe variant of `with_try_get` from [intl_memoizer::IntlLangMemoizer].
13 /// The generics enforce that `Self` and its arguments are actually threadsafe.
14 ///
15 /// `I` - The [Memoizable](intl_memoizer::Memoizable) internationalization formatter.
16 ///
17 /// `R` - The result from the format operation.
18 ///
19 /// `U` - The callback that accepts the instance of the intl formatter, and generates
20 /// some kind of results `R`.
21 fn with_try_get_threadsafe<I, R, U>(&self, args: I::Args, callback: U) -> Result<R, I::Error>
22 where
23 Self: Sized,
24 I: Memoizable + Send + Sync + 'static,
25 I::Args: Send + Sync + 'static,
26 U: FnOnce(&I) -> R;
27
28 /// Wires up the `as_string` or `as_string_threadsafe` variants for [`FluentType`].
29 fn stringify_value(&self, value: &dyn FluentType) -> std::borrow::Cow<'static, str>;
30}