feat: storage sync/async funcs
This commit is contained in:
@@ -102,7 +102,7 @@ func NewFS(storageRoot string) (*fsStorage, error) {
|
||||
|
||||
func (s *fsStorage) StateExistsAsync(callback func(bool, error)) {
|
||||
go func() {
|
||||
exists, err := s.FileExists(stateFileName)
|
||||
exists, err := s.StateExists()
|
||||
if callback != nil {
|
||||
callback(exists, err)
|
||||
}
|
||||
@@ -111,7 +111,7 @@ func (s *fsStorage) StateExistsAsync(callback func(bool, error)) {
|
||||
|
||||
func (s *fsStorage) LoadStateAsync(callback func(client.State, error)) {
|
||||
go func() {
|
||||
state, err := s.loadStateSync()
|
||||
state, err := s.LoadState()
|
||||
if callback != nil {
|
||||
callback(state, err)
|
||||
}
|
||||
@@ -120,7 +120,7 @@ func (s *fsStorage) LoadStateAsync(callback func(client.State, error)) {
|
||||
|
||||
func (s *fsStorage) SaveStateAsync(state client.State, callback func(error)) {
|
||||
go func() {
|
||||
err := s.saveStateSync(state)
|
||||
err := s.SaveState(state)
|
||||
if callback != nil {
|
||||
callback(err)
|
||||
}
|
||||
@@ -253,7 +253,11 @@ func (s *fsStorage) ListFiles() ([]string, error) {
|
||||
return files, nil
|
||||
}
|
||||
|
||||
func (s *fsStorage) loadStateSync() (client.State, error) {
|
||||
func (s *fsStorage) StateExists() (bool, error) {
|
||||
return s.FileExists(stateFileName)
|
||||
}
|
||||
|
||||
func (s *fsStorage) LoadState() (client.State, error) {
|
||||
data, err := s.ReadFile(stateFileName)
|
||||
if err != nil {
|
||||
return client.State{}, err
|
||||
@@ -261,7 +265,7 @@ func (s *fsStorage) loadStateSync() (client.State, error) {
|
||||
return unmarshalState(data)
|
||||
}
|
||||
|
||||
func (s *fsStorage) saveStateSync(state client.State) error {
|
||||
func (s *fsStorage) SaveState(state client.State) error {
|
||||
data, err := marshalState(state)
|
||||
if err != nil {
|
||||
return err
|
||||
|
||||
@@ -22,6 +22,39 @@ type callbackResult[T any] struct {
|
||||
err error
|
||||
}
|
||||
|
||||
func TestStateRoundTrip(t *testing.T) {
|
||||
s := newTestStorage(t)
|
||||
want := sampleState()
|
||||
|
||||
exists, err := s.StateExists()
|
||||
if err != nil {
|
||||
t.Fatalf("state exists before save: %v", err)
|
||||
}
|
||||
if exists {
|
||||
t.Fatal("state file should not exist before save")
|
||||
}
|
||||
|
||||
if err := s.SaveState(want); err != nil {
|
||||
t.Fatalf("save state: %v", err)
|
||||
}
|
||||
|
||||
exists, err = s.StateExists()
|
||||
if err != nil {
|
||||
t.Fatalf("state exists after save: %v", err)
|
||||
}
|
||||
if !exists {
|
||||
t.Fatal("state file should exist after save")
|
||||
}
|
||||
|
||||
got, err := s.LoadState()
|
||||
if err != nil {
|
||||
t.Fatalf("load state: %v", err)
|
||||
}
|
||||
if !reflect.DeepEqual(got, want) {
|
||||
t.Fatalf("loaded state mismatch\nwant: %#v\ngot: %#v", want, got)
|
||||
}
|
||||
}
|
||||
|
||||
func TestStateRoundTripAsync(t *testing.T) {
|
||||
s := newTestStorage(t)
|
||||
want := sampleState()
|
||||
|
||||
@@ -14,7 +14,9 @@ type Storage interface {
|
||||
DeleteFile(string) error
|
||||
ListFiles() ([]string, error)
|
||||
|
||||
// StateExistss() (bool, error)
|
||||
StateExists() (bool, error)
|
||||
LoadState() (client.State, error)
|
||||
SaveState(client.State) error
|
||||
}
|
||||
|
||||
// UIStorage manages Client's data local storing and retrieval.
|
||||
|
||||
Reference in New Issue
Block a user