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 }