use crate::error::Result;
use serde::{Deserialize, Serialize};
use std::fs;
use std::path::PathBuf;
#[derive(Debug, Serialize, Deserialize, Clone)]
pub struct DirectoryEntry {
pub prefix_file: String,
pub cloud_dir: String,
}
#[derive(Debug, Serialize, Deserialize, Clone)]
pub struct Config {
pub endpoint: String,
pub bucket: String,
pub part_size: u64,
pub local_directory_path: String,
pub directory_struct: Vec<DirectoryEntry>,
}
pub fn config_path() -> PathBuf {
let mut dir = dirs_next::config_dir().expect("Cannot get config directory");
dir.push("prefixload");
if !dir.exists() {
fs::create_dir_all(&dir).expect("Cannot create config directory");
}
dir.push("config.yml");
dir
}
impl Config {
pub fn load(path: &PathBuf) -> Result<Self> {
let s = fs::read_to_string(path)?;
Ok(serde_yaml::from_str(&s)?)
}
pub fn save(&self, path: &PathBuf) -> Result<()> {
let s = serde_yaml::to_string(self)?;
fs::write(path, s)?;
Ok(())
}
}