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 }