1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42
use crate::files::FileService; use crate::project::model::ProjectSummary; use crate::{Project, Result}; use std::sync::Arc; #[derive(Debug)] pub struct ProjectContext { project: Project } #[derive(Debug)] pub struct ProjectService { files: Arc<FileService>, log: slog::Logger } impl ProjectService { pub fn new(files: Arc<FileService>, logger: &slog::Logger) -> ProjectService { ProjectService { files, log: logger.new(slog::o!("service" => "project")) } } pub fn keys(&self) -> Result<Vec<String>> { Ok(self.files.list_json("projects")?) } pub fn get_all(&self) -> Result<Vec<Project>> { self.keys()?.iter().map(|k| self.get(k)).collect() } pub fn get(&self, key: &str) -> Result<Project> { let summ: ProjectSummary = self.files.read_json(&format!("projects/{}", key))?; Ok(Project::new(key.into(), summ.name, summ.connection_params)) } pub fn set(&self, p: &Project) -> Result<()> { self.files.write_json(p.to_summary(), &format!("project/{}.json", p.key())) } }