aboutsummaryrefslogtreecommitdiff
path: root/src/util/cache.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/util/cache.rs')
-rw-r--r--src/util/cache.rs24
1 files changed, 24 insertions, 0 deletions
diff --git a/src/util/cache.rs b/src/util/cache.rs
new file mode 100644
index 0000000..6e4672f
--- /dev/null
+++ b/src/util/cache.rs
@@ -0,0 +1,24 @@
+use std::env;
+
+use cached::DiskCache;
+use directories::BaseDirs;
+use serde::{Serialize, de::DeserializeOwned};
+
+pub fn make_cache<K, V>(name: &str) -> DiskCache<K, V>
+where
+ K: ToString,
+ V: Serialize + DeserializeOwned,
+{
+ let dir = match BaseDirs::new() {
+ Some(base_dirs) => base_dirs.cache_dir().join("lleap"),
+ None => env::current_dir()
+ .expect("unable to determine current directory")
+ .join("lleap_cache"),
+ };
+
+ DiskCache::new(name)
+ .set_disk_directory(dir)
+ .set_sync_to_disk_on_cache_change(true)
+ .build()
+ .expect("unable to open disk cache")
+}