package uiserver import ( "bytes" "errors" "os" "time" ) // bufferedFile implements os.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.Reader info os.FileInfo } func newBufferedFile(buf []byte, info os.FileInfo) *bufferedFile { return &bufferedFile{ buf: bytes.NewReader(buf), info: info, } } func (t *bufferedFile) Read(p []byte) (n int, err error) { return t.buf.Read(p) } func (t *bufferedFile) Seek(offset int64, whence int) (int64, error) { return t.buf.Seek(offset, whence) } func (t *bufferedFile) Close() error { return nil } func (t *bufferedFile) Readdir(count int) ([]os.FileInfo, error) { return nil, errors.New("not a directory") } func (t *bufferedFile) Stat() (os.FileInfo, error) { return t, nil } func (t *bufferedFile) Name() string { return t.info.Name() } func (t *bufferedFile) Size() int64 { return int64(t.buf.Len()) } func (t *bufferedFile) Mode() os.FileMode { return t.info.Mode() } func (t *bufferedFile) ModTime() time.Time { return t.info.ModTime() } func (t *bufferedFile) IsDir() bool { return false } func (t *bufferedFile) Sys() interface{} { return nil }