From cc5107d0dbb329910c0a59030a7ff2a431fedf47 Mon Sep 17 00:00:00 2001 From: Kovid Goyal Date: Thu, 9 Feb 2023 21:33:18 +0530 Subject: [PATCH] Convenient way to load/save JSON data --- tools/utils/cached_values.go | 40 ++++++++++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) create mode 100644 tools/utils/cached_values.go diff --git a/tools/utils/cached_values.go b/tools/utils/cached_values.go new file mode 100644 index 000000000..3785f4185 --- /dev/null +++ b/tools/utils/cached_values.go @@ -0,0 +1,40 @@ +// License: GPLv3 Copyright: 2023, Kovid Goyal, + +package utils + +import ( + "encoding/json" + "fmt" + "os" + "path/filepath" +) + +var _ = fmt.Print + +type CachedValues[T any] struct { + Name string + Opts T +} + +func (self *CachedValues[T]) Path() string { + return filepath.Join(CacheDir(), self.Name+".json") +} + +func (self *CachedValues[T]) Load() T { + raw, err := os.ReadFile(self.Path()) + if err == nil { + json.Unmarshal(raw, self.Opts) + } + return self.Opts +} + +func (self *CachedValues[T]) Save() { + raw, err := json.Marshal(self.Opts) + if err == nil { + os.WriteFile(self.Path(), raw, 0600) + } +} + +func NewCachedValues[T any](name string, initial_val T) *CachedValues[T] { + return &CachedValues[T]{Name: name, Opts: initial_val} +}