use settings_manager::result::Result as SettingsResult;
use settings_manager::types::Priority as SettingsPriority;
use crate::system::common::config_dir_path;
use serde::{Serialize, Deserialize};
use cluFlock::FlockLock;
use derivative::{self, Derivative};
use settings_manager::settings::Settings;
use settings_manager::system_settings::{SystemSettings, LockSettingsFile};
use settings_manager::list_setting::ListSetting;
use std::path::PathBuf;
use std::default::Default;
use std::fs::File;
use crate::system::resources::project::Project;
#[derive(Serialize, Deserialize, Derivative, Default)]
#[derivative(Debug)]
pub struct Projects {
#[serde(skip)]
_file_lock: Option<FlockLock<File>>,
pub projects: Vec<Project>,
}
impl Settings for Projects {
fn store_lock(&mut self, file_lock: FlockLock<File>) {
self._file_lock = Some(file_lock);
}
fn controls_file(&self) -> bool {
self._file_lock.is_some()
}
fn priority(&self) -> SettingsPriority {
SettingsPriority::User
}
}
impl SystemSettings for Projects {
fn path() -> SettingsResult<PathBuf> {
let settings_dir = config_dir_path()?;
Ok(settings_dir.join("projects.json"))
}
}
impl ListSetting for Projects {
type Item = Project;
fn items(&mut self) -> &mut Vec<Project> {
&mut self.projects
}
}
impl LockSettingsFile for Projects {}
#[cfg(test)]
#[path = "./projects_test.rs"]
mod projects_test;