open-consul/agent/uiserver/buffered_file.go

65 lines
1.1 KiB
Go

// Copyright (c) HashiCorp, Inc.
// SPDX-License-Identifier: MPL-2.0
package uiserver
import (
"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 *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, nil
}
func (b *bufferedFile) Read(bytes []byte) (int, error) {
return b.buf.Read(bytes)
}
func (b *bufferedFile) Close() error {
return nil
}
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
}