use std::{
fs::File,
io::{self, BufReader, Read, Write},
path::Path,
};
use anyhow::Result;
use chrono::{DateTime, Utc};
use serde::{Deserialize, Serialize};
#[derive(Debug, Serialize, Deserialize, Clone)]
pub struct ProjectConfig {
pub name: String,
pub created_date: DateTime<Utc>,
pub last_modified_date: DateTime<Utc>,
}
impl PartialEq for ProjectConfig {
fn eq(&self, other: &Self) -> bool {
self.name == other.name && self.created_date == other.created_date
}
}
impl ProjectConfig {
pub fn new(name: &str) -> Self {
Self {
name: name.to_string(),
created_date: Utc::now(),
last_modified_date: Utc::now(),
}
}
pub fn new_from_file(path: &Path) -> Result<Self> {
let file = File::open(path)?;
let mut reader = BufReader::new(file);
let mut contents = String::new();
reader.read_to_string(&mut contents)?;
Ok(serde_json::from_str(&contents)?)
}
pub fn save_to_file(&self, path: &Path) -> Result<()> {
let file = File::create(path)?;
let mut writer = io::BufWriter::new(file);
let contents = serde_json::to_string_pretty(&self)?;
writer.write_all(contents.as_bytes())?;
Ok(())
}
pub fn update_last_modified_date(&mut self) {
self.last_modified_date = Utc::now();
}
}