From 3202bb86ef0ddaeae82d78daa419e38722f42a7c Mon Sep 17 00:00:00 2001 From: Andrea Manzini Date: Wed, 19 Feb 2025 15:02:58 +0100 Subject: [PATCH] Replace HashMap with BTreeMap to remove non-determinism in build --- crates/macro/src/lib.rs | 4 ++-- crates/support/src/lib.rs | 16 ++++++++-------- 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/crates/macro/src/lib.rs b/crates/macro/src/lib.rs index 16bb25b..b35497f 100644 --- a/crates/macro/src/lib.rs +++ b/crates/macro/src/lib.rs @@ -3,7 +3,7 @@ use rust_i18n_support::{ is_debug, load_locales, I18nConfig, DEFAULT_MINIFY_KEY, DEFAULT_MINIFY_KEY_LEN, DEFAULT_MINIFY_KEY_PREFIX, DEFAULT_MINIFY_KEY_THRESH, }; -use std::collections::HashMap; +use std::collections::BTreeMap; use syn::{parse_macro_input, Expr, Ident, LitBool, LitStr, Token}; mod minify_key; @@ -268,7 +268,7 @@ pub fn i18n(input: proc_macro::TokenStream) -> proc_macro::TokenStream { } fn generate_code( - translations: HashMap>, + translations: BTreeMap>, args: Args, ) -> proc_macro2::TokenStream { let mut all_translations = Vec::::new(); diff --git a/crates/support/src/lib.rs b/crates/support/src/lib.rs index 84b4db3..f8a7b1e 100644 --- a/crates/support/src/lib.rs +++ b/crates/support/src/lib.rs @@ -1,7 +1,7 @@ use normpath::PathExt; use std::fs::File; use std::io::prelude::*; -use std::{collections::HashMap, path::Path}; +use std::{collections::BTreeMap, path::Path}; mod atomic_str; mod backend; @@ -19,7 +19,7 @@ pub use minify_key::{ type Locale = String; type Value = serde_json::Value; -type Translations = HashMap; +type Translations = BTreeMap; pub fn is_debug() -> bool { std::env::var("RUST_I18N_DEBUG").unwrap_or_else(|_| "0".to_string()) == "1" @@ -43,9 +43,9 @@ fn merge_value(a: &mut Value, b: &Value) { pub fn load_locales bool>( locales_path: &str, ignore_if: F, -) -> HashMap> { - let mut result: HashMap> = HashMap::new(); - let mut translations = HashMap::new(); +) -> BTreeMap> { + let mut result: BTreeMap> = BTreeMap::new(); + let mut translations = BTreeMap::new(); let locales_path = match Path::new(locales_path).normalize() { Ok(p) => p, Err(e) => { @@ -200,7 +200,7 @@ fn parse_file_v2(key_prefix: &str, data: &serde_json::Value) -> Option String { .join(".") } -fn flatten_keys(prefix: &str, trs: &Value) -> HashMap { - let mut v = HashMap::::new(); +fn flatten_keys(prefix: &str, trs: &Value) -> BTreeMap { + let mut v = BTreeMap::::new(); let prefix = prefix.to_string(); match &trs {