rust: checksum: Use BTreeMap instead of HashMap

By using `BTreeMap`, we force the checksum files to be ordered.

This prevents excessive noise during `./crate_tool regenerate --all`

Bug: 388273315
Test: ./crate_tool regenerate aarch64-paging , temp commit, run again, check no diffs.
Change-Id: Ia1de8a43723329f9ac56fde16f7be6005a449bdd
diff --git a/tools/external_crates/checksum/src/lib.rs b/tools/external_crates/checksum/src/lib.rs
index e14188f..33b2805 100644
--- a/tools/external_crates/checksum/src/lib.rs
+++ b/tools/external_crates/checksum/src/lib.rs
@@ -16,7 +16,7 @@
 //! very similar to .cargo-checksum.json
 
 use std::{
-    collections::HashMap,
+    collections::BTreeMap,
     fs::{remove_file, write, File},
     io::{self, BufReader, Read},
     path::{Path, PathBuf, StripPrefixError},
@@ -31,7 +31,8 @@
 #[derive(Serialize, Deserialize)]
 struct Checksum {
     package: Option<String>,
-    files: HashMap<String, String>,
+    // BTreeMap keeps this reproducible
+    files: BTreeMap<String, String>,
 }
 
 #[allow(missing_docs)]
@@ -62,7 +63,7 @@
     if checksum_file.exists() {
         remove_file(&checksum_file)?;
     }
-    let mut checksum = Checksum { package: None, files: HashMap::new() };
+    let mut checksum = Checksum { package: None, files: BTreeMap::new() };
     for entry in WalkDir::new(crate_dir).follow_links(true) {
         let entry = entry?;
         if entry.path().is_dir() {