Add place() method to VFolder for placing virtual file system on disk
This commit is contained in:
parent
5cc403970b
commit
343f014e6c
|
@ -1,4 +1,4 @@
|
||||||
use std::collections::HashMap;
|
use std::{collections::HashMap, fs, io, path::Path};
|
||||||
|
|
||||||
#[derive(Debug, Default, Clone)]
|
#[derive(Debug, Default, Clone)]
|
||||||
pub struct VFolder {
|
pub struct VFolder {
|
||||||
|
@ -102,6 +102,24 @@ impl VFolder {
|
||||||
self.files.get_mut(name)
|
self.files.get_mut(name)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub fn place(&self, path: &Path) -> io::Result<()> {
|
||||||
|
fs::create_dir_all(path)?;
|
||||||
|
for (name, folder) in &self.folders {
|
||||||
|
folder.place(&path.join(name))?;
|
||||||
|
}
|
||||||
|
for (name, file) in &self.files {
|
||||||
|
match file {
|
||||||
|
VFile::Text(text) => {
|
||||||
|
fs::write(path.join(name), text)?;
|
||||||
|
}
|
||||||
|
VFile::Binary(data) => {
|
||||||
|
fs::write(path.join(name), data)?;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Ok(())
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Debug, Clone)]
|
#[derive(Debug, Clone)]
|
||||||
|
|
Loading…
Reference in New Issue