package repo import ( "encoding" "errors" "github.com/iliadenisov/galaxy/pkg/repo/fs" ) type StorageError error func NewStorageError(err error) error { return StorageError(err) } type StateError error func NewStateError(msg string) error { return StateError(errors.New(msg)) } type Storage interface { Lock() (func() error, error) Exist(string) (bool, error) Write(string, encoding.BinaryMarshaler) error Read(string, encoding.BinaryUnmarshaler) error } type repo struct { s Storage } func NewRepo(s Storage) (*repo, error) { r := &repo{ s: s, } return r, nil } func NewFileRepo(path string) (*repo, error) { s, err := fs.NewFileStorage(path) if err != nil { return nil, err } return NewRepo(s) }