Files
sablier/app/storage/file.go
Alexis Couvreur 8844a36e4a refactor(logging): use slog instead of logrus (#501)
Everything uses slog now and the logger is part of every struct
2025-02-02 23:01:51 -05:00

59 lines
1.2 KiB
Go

package storage
import (
"fmt"
"io"
"log/slog"
"os"
"github.com/sablierapp/sablier/config"
)
type Storage interface {
Reader() (io.ReadCloser, error)
Writer() (io.WriteCloser, error)
}
type FileStorage struct {
file string
l *slog.Logger
}
func NewFileStorage(config config.Storage, logger *slog.Logger) (Storage, error) {
logger = logger.With(slog.String("file", config.File))
storage := &FileStorage{
file: config.File,
}
file, err := os.OpenFile(config.File, os.O_RDWR|os.O_CREATE, 0755)
if err != nil {
return nil, fmt.Errorf("unable to open file: %w", err)
}
defer file.Close()
stats, err := file.Stat()
if err != nil {
return nil, fmt.Errorf("unable to read file info: %w", err)
}
// Initialize file to an empty JSON3
if stats.Size() == 0 {
_, err := file.WriteString("{}")
if err != nil {
return nil, fmt.Errorf("unable to initialize file to valid json: %w", err)
}
}
logger.Info("storage successfully initialized")
return storage, nil
}
func (fs *FileStorage) Reader() (io.ReadCloser, error) {
return os.OpenFile(fs.file, os.O_RDWR|os.O_CREATE, 0755)
}
func (fs *FileStorage) Writer() (io.WriteCloser, error) {
return os.OpenFile(fs.file, os.O_RDWR|os.O_CREATE|os.O_TRUNC, 0755)
}