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}