Files
term-tier/internal/persistence/fileSaver.go
T

63 lines
1.2 KiB
Go

package persistence
import (
"encoding/json"
"os"
"github.com/StevanFreeborn/term-tier/internal/core"
)
type FileSystem interface {
WriteFile(name string, data []byte, perm os.FileMode) error
ReadFile(name string) ([]byte, error)
}
type osFileSystem struct{}
func (osFileSystem) WriteFile(name string, data []byte, perm os.FileMode) error {
return os.WriteFile(name, data, perm)
}
func (osFileSystem) ReadFile(name string) ([]byte, error) {
return os.ReadFile(name)
}
type fileSaver struct {
fs FileSystem
}
func NewFileSaver() core.Saver {
return &fileSaver{
fs: osFileSystem{},
}
}
func NewFileSaverWithFS(fs FileSystem) core.Saver {
return &fileSaver{
fs: fs,
}
}
func (s *fileSaver) Save(filename string, state core.SaveState) error {
data, err := json.MarshalIndent(state, "", " ")
if err != nil {
return err
}
return s.fs.WriteFile(filename, data, 0644)
}
func (s *fileSaver) Load(filename string) (core.SaveState, error) {
data, err := s.fs.ReadFile(filename)
if err != nil {
return core.SaveState{}, err
}
var state core.SaveState
if err := json.Unmarshal(data, &state); err != nil {
return core.SaveState{}, err
}
return state, nil
}