diff --git a/backend/src/generator.rs b/backend/src/generator.rs index f054102..54a0197 100644 --- a/backend/src/generator.rs +++ b/backend/src/generator.rs @@ -31,6 +31,8 @@ pub trait GeneratorTraits { fn dot_path(&self, path: &PathBuf) -> PathBuf; fn get_cached(&self, file: &PathBuf, token: &str, read: impl Fn(&PathBuf) -> Result, gen: impl Fn(&PathBuf) -> Result<()>) -> Result; + fn get_cached_json(&self, file: &PathBuf, token: &str, gen: impl Fn() -> Result) -> Result + where T: de::DeserializeOwned + ?Sized + ser::Serialize; } impl GeneratorTraits for Generator { @@ -56,5 +58,20 @@ impl GeneratorTraits for Generator { } Ok(read(&dot)?) } + + /// Get the cached result + fn get_cached_json(&self, file: &PathBuf, token: &str, gen: impl Fn() -> Result) -> Result + where T: de::DeserializeOwned + ?Sized + ser::Serialize { + self.get_cached(&file, token, |f| { + let open = File::open(f)?; + let reader = BufReader::new(open); + let val: T = serde_json::from_reader(reader)?; + Ok(val) + }, |f| { + let res = gen()?; + fs::write(f, serde_json::to_string(&res)?)?; + Ok(()) + }) + } }