about summary refs log tree commit diff
path: root/src/util
diff options
context:
space:
mode:
Diffstat (limited to 'src/util')
-rw-r--r--src/util/cache.rs24
-rw-r--r--src/util/mod.rs2
2 files changed, 26 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")
+}
diff --git a/src/util/mod.rs b/src/util/mod.rs
index 4d19eff..2098a35 100644
--- a/src/util/mod.rs
+++ b/src/util/mod.rs
@@ -1,3 +1,5 @@
+mod cache;
 mod tracker;
 
+pub use cache::make_cache;
 pub use tracker::Tracker;