quick_file/
lib.rs

1use std::{
2    fs::{read_to_string, write},
3    panic::panic_any,
4};
5
6pub struct ConfigManager {
7    pub root_path: String,
8}
9
10impl ConfigManager {
11    pub fn new(name: &str) -> Self {
12        Self {
13            root_path: match std::env::consts::OS {
14                "linux" | "macos" => match std::env::var("HOME") {
15                    Ok(home) => format!("{}/.{}", home, name),
16                    Err(err) => panic_any(err),
17                },
18                "windows" => match std::env::var("APPDATA") {
19                    Ok(appdata) => format!("{}/{}", appdata, name),
20                    Err(err) => panic_any(err),
21                },
22                _ => unimplemented!(),
23            },
24        }
25    }
26
27    pub fn write(&self, file_name: &str, content: &str) -> std::io::Result<()> {
28        write(format!("{}/{}", self.root_path, file_name), content)
29    }
30
31    pub fn read(&self, file_name: &str) -> std::io::Result<String> {
32        let path = format!("{}/{}", self.root_path, file_name);
33        read_to_string(path)
34    }
35
36    pub fn swap_file(&self, file_name: &str, content: &str) -> std::io::Result<String> {
37        let previous_content = self.read(file_name);
38        self.write(file_name, content)?;
39        previous_content
40    }
41}