dsfx/pkg/disk/default.go

65 lines
1.5 KiB
Go

package disk
import (
"io/fs"
"log/slog"
"os"
"time"
)
type osDisk struct {
logger *slog.Logger
}
// Default returns a new instance of the defaultDisk type, which implements
// the Disk interface. This is the default implementation for file operations
// using the standard os package.
func Default() Disk {
return &osDisk{logger: slog.Default()}
}
// Create implements Disk.
func (d *osDisk) Create(name string) (File, error) {
ts := time.Now()
file, err := os.Create(name)
el := time.Now().Sub(ts).String()
d.logger.Debug("(io) disk.Create", "duration", el)
return file, err
}
// Mkdir implements Disk.
func (d *osDisk) Mkdir(name string, perm fs.FileMode) error {
ts := time.Now()
err := os.Mkdir(name, perm)
el := time.Now().Sub(ts).String()
d.logger.Debug("(io) disk.Mkdir", "duration", el)
return err
}
// Open implements Disk.
func (d *osDisk) Open(name string) (File, error) {
ts := time.Now()
file, err := os.Open(name)
el := time.Now().Sub(ts).String()
d.logger.Debug("(io) disk.Open", "duration", el)
return file, err
}
// Remove implements Disk.
func (d *osDisk) Remove(name string) error {
ts := time.Now()
err := os.Remove(name)
el := time.Now().Sub(ts).String()
d.logger.Debug("(io) disk.Remove", "duration", el)
return err
}
// Stat implements Disk.
func (d *osDisk) Stat(name string) (fs.FileInfo, error) {
ts := time.Now()
info, err := os.Stat(name)
el := time.Now().Sub(ts).String()
d.logger.Debug("(io) disk.Stat", "duration", el)
return info, err
}