Reimplement fs.FileInfo interface (#13315)

Co-authored-by: R.B. Boyer <4903+rboyer@users.noreply.github.com>
This commit is contained in:
Chris S. Kim 2022-06-01 11:09:51 -04:00 committed by GitHub
parent b0e5573f30
commit 44a318ef73
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 36 additions and 8 deletions

View File

@ -1,20 +1,31 @@
package uiserver
import (
"io"
"bytes"
"io/fs"
"os"
"time"
)
// bufferedFile implements fs.File and allows us to modify a file from disk by
// writing out the new version into a buffer and then serving file reads from
// that.
type bufferedFile struct {
buf io.Reader
buf *bytes.Buffer
info fs.FileInfo
}
var _ fs.FileInfo = (*bufferedFile)(nil)
func newBufferedFile(buf *bytes.Buffer, info fs.FileInfo) *bufferedFile {
return &bufferedFile{
buf: buf,
info: info,
}
}
func (b *bufferedFile) Stat() (fs.FileInfo, error) {
return b.info, nil
return b, nil
}
func (b *bufferedFile) Read(bytes []byte) (int, error) {
@ -25,9 +36,26 @@ func (b *bufferedFile) Close() error {
return nil
}
func newBufferedFile(buf io.Reader, info fs.FileInfo) *bufferedFile {
return &bufferedFile{
buf: buf,
info: info,
}
func (b *bufferedFile) Name() string {
return b.info.Name()
}
func (b *bufferedFile) Size() int64 {
return int64(b.buf.Len())
}
func (b *bufferedFile) Mode() os.FileMode {
return b.info.Mode()
}
func (b *bufferedFile) ModTime() time.Time {
return b.info.ModTime()
}
func (b *bufferedFile) IsDir() bool {
return false
}
func (b *bufferedFile) Sys() any {
return nil
}