tiny-rdm/backend/storage/local_storage.go

56 lines
1.2 KiB
Go
Raw Normal View History

2023-06-27 15:53:29 +08:00
package storage
import (
"github.com/vrischmann/userdir"
"os"
"path"
)
// localStorage provides reading and writing application data to the user's
// configuration directory.
type localStorage struct {
ConfPath string
}
// NewLocalStore returns a localStore instance.
func NewLocalStore(filename string) *localStorage {
return &localStorage{
ConfPath: path.Join(userdir.GetConfigHome(), "TinyRDM", filename),
}
}
// Load reads the given file in the user's configuration directory and returns
// its contents.
func (l *localStorage) Load() ([]byte, error) {
d, err := os.ReadFile(l.ConfPath)
if err != nil {
return nil, err
}
return d, err
}
// Store writes data to the user's configuration directory at the given
// filename.
func (l *localStorage) Store(data []byte) error {
dir := path.Dir(l.ConfPath)
if err := ensureDirExists(dir); err != nil {
return err
}
if err := os.WriteFile(l.ConfPath, data, 0777); err != nil {
return err
}
return nil
}
// ensureDirExists checks for the existence of the directory at the given path,
// which is created if it does not exist.
func ensureDirExists(path string) error {
_, err := os.Stat(path)
if os.IsNotExist(err) {
if err = os.Mkdir(path, 0777); err != nil {
return err
}
}
return nil
}