75 lines
1.0 KiB
Go
75 lines
1.0 KiB
Go
|
package vfs
|
||
|
|
||
|
import (
|
||
|
"bytes"
|
||
|
"io/fs"
|
||
|
"os"
|
||
|
"time"
|
||
|
)
|
||
|
|
||
|
type File struct {
|
||
|
name string
|
||
|
mode os.FileMode
|
||
|
modified time.Time
|
||
|
open bool
|
||
|
data *bytes.Buffer
|
||
|
}
|
||
|
|
||
|
type fileInfo struct {
|
||
|
name string
|
||
|
size int64
|
||
|
modified time.Time
|
||
|
mode os.FileMode
|
||
|
}
|
||
|
|
||
|
func (f *File) Stat() (fs.FileInfo, error) {
|
||
|
if f.open {
|
||
|
return &fileInfo{
|
||
|
name: f.name,
|
||
|
size: int64(f.data.Len()),
|
||
|
modified: f.modified,
|
||
|
mode: f.mode,
|
||
|
}, nil
|
||
|
}
|
||
|
return nil, fs.ErrClosed
|
||
|
}
|
||
|
|
||
|
func (f *File) Read(data []byte) (int, error) {
|
||
|
if f.open {
|
||
|
return f.data.Read(data)
|
||
|
}
|
||
|
return 0, fs.ErrClosed
|
||
|
}
|
||
|
|
||
|
func (f *File) Close() error {
|
||
|
if f.open {
|
||
|
f.open = false
|
||
|
return nil
|
||
|
}
|
||
|
return fs.ErrClosed
|
||
|
}
|
||
|
|
||
|
func (f fileInfo) Name() string {
|
||
|
return f.name
|
||
|
}
|
||
|
|
||
|
func (f fileInfo) Size() int64 {
|
||
|
return f.size
|
||
|
}
|
||
|
|
||
|
func (f fileInfo) Mode() fs.FileMode {
|
||
|
return f.mode
|
||
|
}
|
||
|
|
||
|
func (f fileInfo) ModTime() time.Time {
|
||
|
return f.modified
|
||
|
}
|
||
|
|
||
|
func (f fileInfo) IsDir() bool {
|
||
|
return f.mode == fs.ModeDir
|
||
|
}
|
||
|
|
||
|
func (f fileInfo) Sys() any {
|
||
|
return nil
|
||
|
}
|