diff --git a/src/backups.rs b/src/backups.rs index c312949..fbb4c1f 100644 --- a/src/backups.rs +++ b/src/backups.rs @@ -3,7 +3,7 @@ use core::panic; use std::{ - collections::HashMap, + collections::BTreeMap, fs, io, path::{Path, PathBuf}, }; @@ -202,14 +202,14 @@ impl Backup { #[derive(Debug, Serialize, Deserialize)] pub struct Backups { - pub list: HashMap, + pub list: BTreeMap, } impl Backups { /// Empty [`Backups`]. pub fn new() -> Backups { Backups { - list: HashMap::new(), + list: BTreeMap::new(), } } diff --git a/src/cmd_backup.rs b/src/cmd_backup.rs index 90c909f..618ad6c 100644 --- a/src/cmd_backup.rs +++ b/src/cmd_backup.rs @@ -1,5 +1,5 @@ use std::{ - collections::HashMap, + collections::BTreeMap, io::{self, stdout, Write}, path::{Path, PathBuf}, }; @@ -103,14 +103,14 @@ pub fn cmd_backup_list( storages: &Storages, ) -> Result<()> { let devices = devices::get_devices(config_dir)?; - let backups: HashMap<(String, String), Backup> = match device_name { + let backups: BTreeMap<(String, String), Backup> = match device_name { Some(device_name) => { let device = devices .iter() .find(|dev| dev.name() == device_name) .context(format!("Device with name {} doesn't exist", device_name))?; let backups = Backups::read(config_dir, device)?; - let mut allbackups = HashMap::new(); + let mut allbackups = BTreeMap::new(); for (name, backup) in backups.list { if allbackups.insert((device.name(), name), backup).is_some() { return Err(anyhow!("unexpected duplication in backups hashmap")); @@ -119,7 +119,7 @@ pub fn cmd_backup_list( allbackups } None => { - let mut allbackups = HashMap::new(); + let mut allbackups = BTreeMap::new(); for device in &devices { let backups = Backups::read(config_dir, device)?; for (name, backup) in backups.list { @@ -132,7 +132,7 @@ pub fn cmd_backup_list( } }; // source/destination filtering - let backups: HashMap<(String, String), Backup> = backups + let backups: BTreeMap<(String, String), Backup> = backups .into_iter() .filter(|((_dev, _name), backup)| { let src_matched = match &src_storage { @@ -156,7 +156,7 @@ pub fn cmd_backup_list( /// TODO: status printing fn write_backups_list( mut writer: impl io::Write, - backups: HashMap<(String, String), Backup>, + backups: BTreeMap<(String, String), Backup>, longprint: bool, storages: &Storages, devices: &[Device], diff --git a/src/storages.rs b/src/storages.rs index b67b9cf..8137546 100644 --- a/src/storages.rs +++ b/src/storages.rs @@ -9,7 +9,7 @@ use anyhow::{anyhow, Context, Result}; use clap::ValueEnum; use core::panic; use serde::{Deserialize, Serialize}; -use std::{collections::HashMap, fmt, fs, io, path, u64}; +use std::{collections::BTreeMap, fmt, fs, io, path, u64}; /// YAML file to store known storages.. pub const STORAGESFILE: &str = "storages.yml"; @@ -135,7 +135,7 @@ pub trait StorageExt { fn local_info(&self, device: &devices::Device) -> Option<&local_info::LocalInfo>; /// Get mount path of `self` on `device`. - /// `storages` is a `HashMap` with key of storage name and value of the storage. + /// `storages` is a `BTreeMap` with key of storage name and value of the storage. fn mount_path(&self, device: &devices::Device) -> Result; /// Add local info of `device` to `self`. @@ -157,14 +157,14 @@ pub mod physical_drive_partition; #[derive(Debug, Serialize, Deserialize)] pub struct Storages { - pub list: HashMap, + pub list: BTreeMap, } impl Storages { /// Construct empty [`Storages`] pub fn new() -> Storages { Storages { - list: HashMap::new(), + list: BTreeMap::new(), } } diff --git a/src/storages/directory.rs b/src/storages/directory.rs index e78e2c9..7887c7b 100644 --- a/src/storages/directory.rs +++ b/src/storages/directory.rs @@ -2,7 +2,7 @@ use anyhow::{Context, Result}; use serde::{Deserialize, Serialize}; -use std::{collections::HashMap, fmt, path}; +use std::{collections::BTreeMap, fmt, path}; use crate::devices; use crate::util; @@ -20,7 +20,7 @@ pub struct Directory { relative_path: path::PathBuf, pub notes: String, /// Device and localinfo pairs. - local_infos: HashMap, + local_infos: BTreeMap, } impl Directory { @@ -33,7 +33,7 @@ impl Directory { parent: String, relative_path: path::PathBuf, notes: String, - local_infos: HashMap, + local_infos: BTreeMap, ) -> Directory { Directory { name, @@ -61,7 +61,7 @@ impl Directory { parent.name().to_string(), diff_path, notes, - HashMap::from([(device.name(), local_info)]), + BTreeMap::from([(device.name(), local_info)]), )) } @@ -142,7 +142,7 @@ impl fmt::Display for Directory { #[cfg(test)] mod test { - use std::{collections::HashMap, path::PathBuf}; + use std::{collections::BTreeMap, path::PathBuf}; use crate::{ devices::Device, @@ -161,7 +161,7 @@ mod test { let local_info_dir = LocalInfo::new("dir_alias".to_string(), PathBuf::from("/mnt/sample/subdir")); let device = Device::new("test_device".to_string()); - let mut local_infos = HashMap::new(); + let mut local_infos = BTreeMap::new(); local_infos.insert(device.name(), local_info_dir); let physical = PhysicalDrivePartition::new( "parent".to_string(), diff --git a/src/storages/online_storage.rs b/src/storages/online_storage.rs index 8ffafde..810600d 100644 --- a/src/storages/online_storage.rs +++ b/src/storages/online_storage.rs @@ -3,7 +3,7 @@ use anyhow::{Context, Result}; use byte_unit::Byte; use serde::{Deserialize, Serialize}; -use std::collections::HashMap; +use std::collections::BTreeMap; use std::fmt; use std::path; @@ -23,7 +23,7 @@ pub struct OnlineStorage { /// Capacity in bytes. capacity: u64, /// Device and local info pairs. - local_infos: HashMap, + local_infos: BTreeMap, } impl OnlineStorage { @@ -42,7 +42,7 @@ impl OnlineStorage { name, provider, capacity, - local_infos: HashMap::from([(device.name(), local_info)]), + local_infos: BTreeMap::from([(device.name(), local_info)]), } } } diff --git a/src/storages/physical_drive_partition.rs b/src/storages/physical_drive_partition.rs index b3fb531..1ad79bb 100644 --- a/src/storages/physical_drive_partition.rs +++ b/src/storages/physical_drive_partition.rs @@ -7,7 +7,7 @@ use anyhow::{anyhow, Context, Result}; use byte_unit::Byte; use serde::{Deserialize, Serialize}; use std::path::{self, Path}; -use std::{collections::HashMap, fmt}; +use std::{collections::BTreeMap, fmt}; use sysinfo::{Disk, DiskExt, SystemExt}; use super::local_info::{self, LocalInfo}; @@ -20,8 +20,8 @@ pub struct PhysicalDrivePartition { capacity: u64, fs: String, is_removable: bool, - // system_names: HashMap, - local_infos: HashMap, + // system_names: BTreeMap, + local_infos: BTreeMap, } impl PhysicalDrivePartition { @@ -40,7 +40,7 @@ impl PhysicalDrivePartition { capacity, fs, is_removable, - local_infos: HashMap::from([(device.name(), local_info)]), + local_infos: BTreeMap::from([(device.name(), local_info)]), } } @@ -65,8 +65,8 @@ impl PhysicalDrivePartition { capacity: disk.total_space(), fs: fs.to_string(), is_removable: disk.is_removable(), - // system_names: HashMap::from([(device.name(), alias)]), - local_infos: HashMap::from([(device.name(), local_info)]), + // system_names: BTreeMap::from([(device.name(), alias)]), + local_infos: BTreeMap::from([(device.name(), local_info)]), }) }