git.wit.org/jcarr/packr@v1.10.8/virtual_file.go (about) 1 package packr 2 3 import ( 4 "bytes" 5 "fmt" 6 "os" 7 "time" 8 ) 9 10 var virtualFileModTime = time.Now() 11 var _ File = virtualFile{} 12 13 type virtualFile struct { 14 *bytes.Reader 15 Name string 16 info fileInfo 17 } 18 19 func (f virtualFile) FileInfo() (os.FileInfo, error) { 20 return f.info, nil 21 } 22 23 func (f virtualFile) Close() error { 24 return nil 25 } 26 27 func (f virtualFile) Write(p []byte) (n int, err error) { 28 return 0, fmt.Errorf("not implemented") 29 } 30 31 func (f virtualFile) Readdir(count int) ([]os.FileInfo, error) { 32 return []os.FileInfo{f.info}, nil 33 } 34 35 func (f virtualFile) Stat() (os.FileInfo, error) { 36 return f.info, nil 37 } 38 39 func newVirtualFile(name string, b []byte) File { 40 return virtualFile{ 41 Reader: bytes.NewReader(b), 42 Name: name, 43 info: fileInfo{ 44 Path: name, 45 Contents: b, 46 size: int64(len(b)), 47 modTime: virtualFileModTime, 48 }, 49 } 50 } 51 52 func newVirtualDir(name string) File { 53 var b []byte 54 v := newVirtualFile(name, b).(virtualFile) 55 v.info.isDir = true 56 return v 57 }