Files
LazyPM/internal/storage/storage.go
2026-01-31 21:07:09 +01:00

54 lines
817 B
Go

package storage
import (
"encoding/json"
"os"
"sync"
)
type Storage[T any] struct {
path string
mu sync.RWMutex
Data *T
}
func NewJsonStorage[T any](path string, defaultData *T) *Storage[T] {
return &Storage[T]{
path: path,
Data: defaultData,
}
}
func (s *Storage[T]) Save() error {
s.mu.Lock()
defer s.mu.Unlock()
data, err := json.MarshalIndent(s.Data, "", " ")
if err != nil {
return err
}
return os.WriteFile(s.path, data, 0644)
}
func (s *Storage[T]) Load() error {
s.mu.Lock()
defer s.mu.Unlock()
bytes, err := os.ReadFile(s.path)
if err != nil {
if os.IsNotExist(err) {
return nil
}
return err
}
return json.Unmarshal(bytes, s.Data)
}
func (s *Storage[T]) Init() error {
if _, err := os.Stat(s.path); os.IsNotExist(err) {
return s.Save()
}
return s.Load()
}