xdbm/src/cmd_check.rs
qwjyh bac829c1f1 lint with clippy
fix problems reported by clippy excepts about unused functions
2024-03-18 08:36:07 +09:00

60 lines
1.9 KiB
Rust

use std::path::Path;
use anyhow::{anyhow, Context, Result};
use crate::{
backups::Backups,
devices,
storages::{Storage, StorageExt, Storages},
};
pub(crate) fn cmd_check(config_dir: &Path) -> Result<()> {
info!("Config dir: {}", &config_dir.display());
let device = devices::get_device(config_dir)?;
info!("Current device: {:?}", device);
let devices = devices::get_devices(config_dir)?;
info!("Configured devices: {:?}", devices);
let storages = Storages::read(config_dir)?;
info!("Storages: {:?}", storages);
if !(storages.list.iter().all(|(_name, storage)| match storage {
Storage::SubDirectory(storage) => storage.parent(&storages).is_some(),
_ => true,
})) {
return Err(anyhow!(
"Some SubDirectory doesn't have its parent in the storages list."
));
};
info!("All SubDirectory's parent exists.");
for device in &devices {
let backups = Backups::read(config_dir, device)?;
for (name, backup) in &backups.list {
if name != backup.name() {
return Err(anyhow!(
"The backup {} name and its key is different.",
name
));
}
let _device = backup
.device(&devices)
.context(format!("The backup {}'s device doesn't exist.", name))?;
if !(storages.list.contains_key(&backup.source().storage)) {
return Err(anyhow!(
"The source of backup {} doesn't exist in storages.",
&backup.name()
));
}
if !(storages.list.contains_key(&backup.destination().storage)) {
return Err(anyhow!(
"The destination of backup {} doesn't exist in storages.",
&backup.name()
));
}
}
}
println!("All check passed");
Ok(())
}