about summary refs log tree commit diff
path: root/gopkgs/kv/kv.go
diff options
context:
space:
mode:
Diffstat (limited to 'gopkgs/kv/kv.go')
-rw-r--r--gopkgs/kv/kv.go40
1 files changed, 40 insertions, 0 deletions
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]
+}