[+] Generator: Cached json

This commit is contained in:
Azalea Gui
2023-02-23 11:53:59 -05:00
parent 0f36380fd8
commit 6e7a6b167b
+17
View File
@@ -31,6 +31,8 @@ pub trait GeneratorTraits {
fn dot_path(&self, path: &PathBuf) -> PathBuf;
fn get_cached<T>(&self, file: &PathBuf, token: &str, read: impl Fn(&PathBuf) -> Result<T>,
gen: impl Fn(&PathBuf) -> Result<()>) -> Result<T>;
fn get_cached_json<T>(&self, file: &PathBuf, token: &str, gen: impl Fn() -> Result<T>) -> Result<T>
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<T>(&self, file: &PathBuf, token: &str, gen: impl Fn() -> Result<T>) -> Result<T>
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(())
})
}
}