Files
galaxy-game/client/storage/storage.go
T
2026-03-12 19:45:46 +03:00

49 lines
1.3 KiB
Go

package storage
import (
"errors"
"fmt"
"galaxy/util"
"path/filepath"
)
const (
// Name of the file under the storage's root where [model.State] is stored.
stateFileName = "state.dat"
// Suffix of a Game's file inder the storage's root where [model.GameData] is stored.
gameDataFileSuffix = ".dat"
)
type storage struct {
root string
}
// NewStorage returns implementation of the "galaxy/client.Storage" interface
// or nil with a non-nil error when filesystem storage initialisation failed.
func NewStorage(rootPath string) (*storage, error) {
ok, err := util.Writable(rootPath)
if err != nil {
return nil, err
}
if !ok {
return nil, errors.New("user does not have write permissions to the storage root")
}
s := &storage{
root: rootPath,
}
return s, nil
}
// StateFilePath returns client's state file path relative to the root,
// file name and extension are pre-defined constant.
func StateFilePath(root string) string {
return filepath.Join(root, stateFileName)
}
// GameDataPath returns game's data file path relative to the root,
// data file name is GameID string representation and extension is a pre-defined constant.
func GameDataFilePath(root string, id fmt.Stringer) string {
return filepath.Join(root, id.String()) + gameDataFileSuffix
}