1use {rand::Rng, std::path::Path};
2
3pub fn generate_random_string(length: usize) -> String {
5 let characters = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";
6 let mut rng = rand::thread_rng();
7
8 (0..length)
9 .map(|_| {
10 let idx = rng.gen_range(0..characters.len());
11 characters.chars().nth(idx).unwrap()
12 })
13 .collect()
14}
15
16pub fn copy_dir_all(src: impl AsRef<Path>, dst: impl AsRef<Path>) -> std::io::Result<()> {
18 std::fs::create_dir_all(&dst)?;
19 for entry in std::fs::read_dir(src)? {
20 let entry = entry?;
21
22 if entry.file_type()?.is_dir() {
23 copy_dir_all(entry.path(), dst.as_ref().join(entry.file_name()))?;
24 } else {
25 std::fs::copy(entry.path(), dst.as_ref().join(entry.file_name()))?;
26 }
27 }
28
29 Ok(())
30}