parent
8e99d53687
commit
02646057cc
@ -0,0 +1,53 @@ |
||||
package spaceapi |
||||
|
||||
import ( |
||||
"encoding/json" |
||||
"fmt" |
||||
"os" |
||||
) |
||||
|
||||
type Listener func(status SpaceStatus) |
||||
|
||||
type Storage struct { |
||||
filePath string |
||||
persistent bool |
||||
status SpaceStatus |
||||
} |
||||
|
||||
func Open(filePath string, persistent bool) (*Storage, error) { |
||||
status, err := readFile(filePath) |
||||
if err != nil { |
||||
return nil, fmt.Errorf("error reading status: %s", err) |
||||
} |
||||
|
||||
return &Storage{ |
||||
filePath: filePath, |
||||
persistent: persistent, |
||||
status: *status, |
||||
}, nil |
||||
} |
||||
|
||||
func (s *Storage) Status() SpaceStatus { |
||||
return s.status |
||||
} |
||||
|
||||
func (s *Storage) Modify(modifiers ...func(*SpaceStatus)) { |
||||
for _, m := range modifiers { |
||||
m(&s.status) |
||||
} |
||||
} |
||||
|
||||
func readFile(fileName string) (*SpaceStatus, error) { |
||||
file, err := os.Open(fileName) |
||||
if err != nil { |
||||
return nil, fmt.Errorf("error opening file: %s", err) |
||||
} |
||||
defer file.Close() |
||||
|
||||
var status SpaceStatus |
||||
if err := json.NewDecoder(file).Decode(&status); err != nil { |
||||
return nil, fmt.Errorf("error decoding state: %s", err) |
||||
} |
||||
|
||||
return &status, nil |
||||
} |
Loading…
Reference in new issue