| 1 | use crate::types::FluentType; |
| 2 | use intl_memoizer::Memoizable; |
| 3 | use 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. |
| 7 | pub 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 | } |
| 31 | |