aboutsummaryrefslogtreecommitdiff
path: root/src/utils.rs
blob: c9d8426f963e010c6da1d715fcf424bdf9b22c2d (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
use std::io::Result;
use std::path::PathBuf;
use std::fs::{copy, create_dir_all, read_dir};

pub fn recursively_copy(source: &PathBuf, target: &PathBuf) -> Result<()> {
    let entries = read_dir(source)?;
    for entry in entries {
        let entry = entry?;
        let entry_type = entry.file_type()?;
        let entry_name = entry.file_name();
        let entry_source = entry.path();
        let entry_target = target.join(entry_name);

        if entry_type.is_dir() {
            create_dir_all(&entry_target)?;
            recursively_copy(&entry_source, &entry_target)?;
        } else {
            copy(&entry_source, &entry_target)?;
        }
    }

    Ok(())
}