feat: implement file system persistence with save and load functionality
This commit is contained in:
@@ -0,0 +1,62 @@
|
||||
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
|
||||
}
|
||||
Reference in New Issue
Block a user