33 lines
539 B
Go
33 lines
539 B
Go
package main
|
|
|
|
import (
|
|
"encoding/json"
|
|
"os"
|
|
)
|
|
|
|
type storage[T any] struct {
|
|
FileName string
|
|
}
|
|
|
|
func newStorage[T any](filename string) *storage[T] {
|
|
return &storage[T]{FileName: filename}
|
|
}
|
|
|
|
func (s *storage[T]) save(data T) error {
|
|
fileData, err := json.MarshalIndent(data, "", " ")
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
return os.WriteFile(s.FileName, fileData, 0o644)
|
|
}
|
|
|
|
func (s *storage[T]) load(data *T) error {
|
|
fileData, err := os.ReadFile(s.FileName)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
return json.Unmarshal(fileData, data)
|
|
}
|