about summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--gopkgs/kv/default.nix11
-rw-r--r--gopkgs/kv/kv.go40
2 files changed, 51 insertions, 0 deletions
diff --git a/gopkgs/kv/default.nix b/gopkgs/kv/default.nix
new file mode 100644
index 000000000000..1d54ecc350df
--- /dev/null
+++ b/gopkgs/kv/default.nix
@@ -0,0 +1,11 @@
+{
+  depot ? import <depot> {},
+  ...
+}:
+
+depot.buildGo.package {
+  name = "kv";
+  srcs = [
+    ./kv.go
+  ];
+}
diff --git a/gopkgs/kv/kv.go b/gopkgs/kv/kv.go
new file mode 100644
index 000000000000..072f000eb2f0
--- /dev/null
+++ b/gopkgs/kv/kv.go
@@ -0,0 +1,40 @@
+// Supporting reading and writing key-value pairs to disk.
+package kv
+
+import (
+	"encoding/json"
+	"io/ioutil"
+	"log"
+)
+
+const storePath = "./kv.json"
+
+// Return the decoded store from disk.
+func getStore() map[string]interface{} {
+	b, err := ioutil.ReadFile(storePath)
+	if err != nil {
+		log.Fatal("Could not read store: ", err)
+	}
+	var state map[string]interface{}
+	err = json.Unmarshal(b, &state)
+	if err != nil {
+		log.Fatal("Could not decode store as JSON: ", err)
+	}
+	return state
+}
+
+// Set `key` to `value` in the store.
+func Set(key string, value interface{}) error {
+	state := getStore()
+	state[key] = value
+	b, err := json.Marshal(state)
+	if err != nil {
+		log.Fatal("Could not encode state as JSON: ", err)
+	}
+	return ioutil.WriteFile(storePath, b, 0644)
+}
+
+// Get `key` from the store.
+func Get(key string) interface{} {
+	return getStore()[key]
+}