1use std::fs::read_to_string;
2use std::io::Write as _;
3use std::{
4 ffi::OsString,
5 fs::{File, ReadDir},
6 path::PathBuf,
7};
8use tempfile::tempfile;
9
10use crate::git_commands::GIT_ROOT;
11use crate::CONFIG_ROOT;
12
13pub fn files(config_files: ReadDir) -> anyhow::Result<Vec<(OsString, File, String)>> {
14 let mut backups = Vec::new();
15
16 for entry in config_files {
17 let config_file = entry?;
18
19 let path = config_file.path();
20 let contents = read_to_string(&path)?;
21
22 let filename = config_file.file_name();
23 let mut destination_backed_up = tempfile()?;
24
25 write!(destination_backed_up, "{contents}")?;
26
27 backups.push((filename, destination_backed_up, contents));
28 }
29
30 Ok(backups)
31}
32pub fn restore(file_name: &OsString, contents: &str) -> anyhow::Result<()> {
33 let path = GIT_ROOT.join(PathBuf::from(CONFIG_ROOT).join(file_name));
34 let mut file = File::create(&path)?;
35
36 write!(file, "{contents}")?;
37
38 Ok(())
39}