Files
stfs/internal/fs/fileinfo.go
2022-01-16 01:18:45 +01:00

129 lines
2.1 KiB
Go

package fs
import (
"archive/tar"
"io/fs"
"os"
"time"
"github.com/pojntfx/stfs/pkg/logging"
)
type FileInfo struct {
os.FileInfo
name string
size int64
mode fs.FileMode
modTime time.Time
accessTime time.Time
changeTime time.Time
gid int
uid int
isDir bool
log logging.StructuredLogger
}
func NewFileInfo(
name string,
size int64,
mode fs.FileMode,
modTime time.Time,
accessTime time.Time,
changeTime time.Time,
gid int,
uid int,
isDir bool,
log logging.StructuredLogger,
) *FileInfo {
return &FileInfo{
name: name,
size: size,
mode: mode,
modTime: modTime,
accessTime: accessTime,
changeTime: changeTime,
gid: gid,
uid: uid,
isDir: isDir,
log: log,
}
}
func NewFileInfoFromTarHeader(
hdr *tar.Header,
log logging.StructuredLogger,
) *FileInfo {
return &FileInfo{
name: hdr.FileInfo().Name(),
size: hdr.FileInfo().Size(),
mode: hdr.FileInfo().Mode(),
modTime: hdr.FileInfo().ModTime(),
accessTime: hdr.AccessTime,
changeTime: hdr.ChangeTime,
gid: hdr.Gid,
uid: hdr.Uid,
isDir: hdr.FileInfo().IsDir(),
log: log,
}
}
func (f *FileInfo) Name() string {
f.log.Trace("FileInfo.Name", map[string]interface{}{
"name": f.name,
})
return f.name
}
func (f *FileInfo) Size() int64 {
f.log.Trace("FileInfo.Size", map[string]interface{}{
"name": f.name,
})
return f.size
}
func (f *FileInfo) Mode() os.FileMode {
f.log.Trace("FileInfo.Mode", map[string]interface{}{
"name": f.name,
})
return f.mode
}
func (f *FileInfo) ModTime() time.Time {
f.log.Trace("FileInfo.ModTime", map[string]interface{}{
"name": f.name,
})
return f.modTime
}
func (f *FileInfo) IsDir() bool {
f.log.Trace("FileInfo.IsDir", map[string]interface{}{
"name": f.name,
})
return f.isDir
}
func (f *FileInfo) Sys() interface{} {
f.log.Trace("FileInfo.Sys", map[string]interface{}{
"name": f.name,
})
return NewStat(
uint32(f.uid),
uint32(f.gid),
f.modTime.UnixNano(),
f.accessTime.UnixNano(),
f.changeTime.UnixNano(),
)
}