es-fluent 0.14.2

The es-fluent crate
Documentation
use es_fluent::__manager_core::{
    FluentManager, I18nModule, I18nModuleDescriptor, I18nModuleRegistration, LocalizationError,
    Localizer, ModuleData,
};
use es_fluent::{FluentValue, localize, set_shared_context};
use std::collections::HashMap;
use std::sync::Arc;

struct SharedModule;
struct SharedLocalizer;

static SHARED_MODULE_DATA: ModuleData = ModuleData {
    name: "es-fluent-shared-context-test",
    domain: "es-fluent-shared-context-test",
    supported_languages: &[],
    namespaces: &[],
};

impl Localizer for SharedLocalizer {
    fn select_language(
        &self,
        _lang: &unic_langid::LanguageIdentifier,
    ) -> Result<(), LocalizationError> {
        Ok(())
    }

    fn localize<'a>(
        &self,
        id: &str,
        _args: Option<&HashMap<&str, FluentValue<'a>>>,
    ) -> Option<String> {
        if id == "shared-key" {
            Some("from-shared-context".to_string())
        } else {
            None
        }
    }
}

impl I18nModuleDescriptor for SharedModule {
    fn data(&self) -> &'static ModuleData {
        &SHARED_MODULE_DATA
    }
}

impl I18nModule for SharedModule {
    fn create_localizer(&self) -> Box<dyn Localizer> {
        Box::new(SharedLocalizer)
    }
}

static SHARED_MODULE: SharedModule = SharedModule;

es_fluent::__inventory::submit! {
    &SHARED_MODULE as &dyn I18nModuleRegistration
}

#[test]
fn shared_context_localizes_and_rejects_second_set() {
    let manager = Arc::new(FluentManager::new_with_discovered_modules());
    set_shared_context(manager);

    assert_eq!(localize("shared-key", None), "from-shared-context");

    let second_set = std::panic::catch_unwind(|| {
        let manager = Arc::new(FluentManager::new_with_discovered_modules());
        set_shared_context(manager);
    });
    assert!(second_set.is_err());
}