blob: 1d6d49188cd1879d6f91e65a73a09d72c539ddb5 [file] [log] [blame] [edit]
use crate::types::FluentType;
use intl_memoizer::Memoizable;
use unic_langid::LanguageIdentifier;
/// This trait contains thread-safe methods which extend [intl_memoizer::IntlLangMemoizer].
/// It is used as the generic bound in this crate when a memoizer is needed.
pub trait MemoizerKind: 'static {
fn new(lang: LanguageIdentifier) -> Self
where
Self: Sized;
/// A threadsafe variant of `with_try_get` from [intl_memoizer::IntlLangMemoizer].
/// The generics enforce that `Self` and its arguments are actually threadsafe.
///
/// `I` - The [Memoizable](intl_memoizer::Memoizable) internationalization formatter.
///
/// `R` - The result from the format operation.
///
/// `U` - The callback that accepts the instance of the intl formatter, and generates
/// some kind of results `R`.
fn with_try_get_threadsafe<I, R, U>(&self, args: I::Args, callback: U) -> Result<R, I::Error>
where
Self: Sized,
I: Memoizable + Send + Sync + 'static,
I::Args: Send + Sync + 'static,
U: FnOnce(&I) -> R;
/// Wires up the `as_string` or `as_string_threadsafe` variants for [`FluentType`].
fn stringify_value(&self, value: &dyn FluentType) -> std::borrow::Cow<'static, str>;
}