use anyhow::{anyhow, Result};
use rand::Rng;
use std::{
cmp, fs,
io::{BufWriter, Write},
path::Path,
};
pub fn create_random_file(path: &Path, size: usize) {
let file = fs::File::create(path).unwrap();
let mut rng = rand::thread_rng();
let mut writer = BufWriter::new(file);
let mut buffer = [0; 1024];
let mut remaining_size = size;
while remaining_size > 0 {
let to_write = cmp::min(remaining_size, buffer.len());
let buffer = &mut buffer[..to_write];
rng.fill(buffer);
writer.write_all(buffer).unwrap();
remaining_size -= to_write;
}
}
pub fn ensure_path_exists_and_is_dir(path: &Path) -> Result<()> {
if !path.exists() {
fs::create_dir_all(path)?;
}
if !path.is_dir() {
return Err(anyhow!("Path is not a directory: {}", path.display()));
}
Ok(())
}
pub fn ensure_path_exists_and_is_empty_dir(path: &Path, force: bool) -> Result<()> {
ensure_path_exists_and_is_dir(path)?;
if path.read_dir().unwrap().count() > 0 {
if force {
fs::remove_dir_all(path)?;
fs::create_dir_all(path)?;
} else {
return Err(anyhow!("Path is not empty: {}", path.display()));
}
}
Ok(())
}