]> git.proxmox.com Git - ui/proxmox-yew-widget-toolkit.git/commitdiff
language: use inner mutability for AVAILABLE_LANUGAGES
authorShannon Sterz <s.sterz@proxmox.com>
Tue, 3 Dec 2024 11:04:48 +0000 (12:04 +0100)
committerDietmar Maurer <dietmar@proxmox.com>
Tue, 3 Dec 2024 11:26:17 +0000 (12:26 +0100)
in rust edition 2024 taking references to `static mut` variables will be
disallowed [1]. the recommended way to adapting to this is using inner
mutability. so use a OnceLock here to ensure that the set of available
languages can only be set once.

[1]:
https://doc.rust-lang.org/nightly/edition-guide/rust-2024/static-mut-references.html

Signed-off-by: Shannon Sterz <s.sterz@proxmox.com>
src/state/language.rs

index 3bfc800f1c15bf798a70ec10052ce8ff07f7be95..a97876f5030d288baf648a77b697cda3991fe663 100644 (file)
@@ -1,3 +1,4 @@
+use std::sync::OnceLock;
 use yew::virtual_dom::Key;
 use yew::Callback;
 
@@ -6,7 +7,7 @@ use crate::props::ExtractPrimaryKey;
 
 use super::{PersistentState, SharedState, SharedStateObserver};
 
-#[derive(Clone, PartialEq)]
+#[derive(Clone, PartialEq, Debug)]
 pub struct LanguageInfo {
     pub lang: String,            // id (de, en, ...)
     pub text: String,            // Language name (native).
@@ -36,16 +37,19 @@ impl ExtractPrimaryKey for LanguageInfo {
     }
 }
 
-static mut AVAILABLE_LANGUAGES: Vec<LanguageInfo> = Vec::new();
+static AVAILABLE_LANGUAGES: OnceLock<Vec<LanguageInfo>> = OnceLock::new();
 
 pub fn set_available_languages(list: Vec<LanguageInfo>) {
-    unsafe {
-        AVAILABLE_LANGUAGES = list;
-    }
+    AVAILABLE_LANGUAGES
+        .set(list)
+        .expect("cannot set language info twice")
 }
 
 pub fn get_available_languages() -> Vec<LanguageInfo> {
-    let list = unsafe { AVAILABLE_LANGUAGES.clone() };
+    let list = AVAILABLE_LANGUAGES
+        .get()
+        .cloned()
+        .expect("cannot access available languages before they've been set");
 
     let list = list
         .into_iter()