package storage import ( "errors" "log" "os" "path/filepath" ) type Storage struct { path string } var ( logger log.Logger = *log.Default() ) func init() { logger.SetFlags(log.Llongfile | log.Ltime) } func (s *Storage) SetPath(path string) { s.path = path } func (s Storage) Read() ([]byte, error) { if len(s.path) == 0 { return nil, errors.New("path not set") } data, err := os.ReadFile(s.path) if err != nil { logger.Printf("unable to read %s (%s)", s.path, err.Error()) return nil, err } return data, nil } func (s Storage) Write(data []byte) error { dir := filepath.Dir(s.path) _, err := os.Stat(dir) if err != nil { if os.IsNotExist(err) { err = os.MkdirAll(dir, 0644) if err != nil { logger.Printf("unable to create %s (%s)", dir, err.Error()) return err } } else { logger.Print(err) return err } } err = os.WriteFile(s.path, data, 0644) if err != nil { logger.Printf("unable to store %s (%s)", s.path, err.Error()) } return nil }