Prefer explicit path for kv.json

Paying off some tech debt. Instead of relying ./kv.json existing, which is
relative to the directory from which I start a program, I'm preferring that a
consumer explicitly provides this path.
This commit is contained in:
William Carroll 2020-02-23 19:58:19 +00:00
parent 3f46ac6513
commit b5d4f547d2

View file

@ -5,13 +5,12 @@ import (
"encoding/json" "encoding/json"
"io/ioutil" "io/ioutil"
"log" "log"
"path"
) )
const storePath = "./kv.json"
// Return the decoded store from disk. // Return the decoded store from disk.
func getStore() map[string]interface{} { func getStore(storePath string) map[string]interface{} {
b, err := ioutil.ReadFile(storePath) b, err := ioutil.ReadFile(path.Join(storePath, "kv.json"))
if err != nil { if err != nil {
log.Fatal("Could not read store: ", err) log.Fatal("Could not read store: ", err)
} }
@ -24,17 +23,17 @@ func getStore() map[string]interface{} {
} }
// Set `key` to `value` in the store. // Set `key` to `value` in the store.
func Set(key string, value interface{}) error { func Set(storePath string, key string, value interface{}) error {
state := getStore() state := getStore(storePath)
state[key] = value state[key] = value
b, err := json.Marshal(state) b, err := json.Marshal(state)
if err != nil { if err != nil {
log.Fatal("Could not encode state as JSON: ", err) log.Fatal("Could not encode state as JSON: ", err)
} }
return ioutil.WriteFile(storePath, b, 0644) return ioutil.WriteFile(path.Join(storePath, "kv.json"), b, 0644)
} }
// Get `key` from the store. // Get `key` from the store.
func Get(key string) interface{} { func Get(storePath string, key string) interface{} {
return getStore()[key] return getStore(path.Join(storePath, "kv.json"))[key]
} }