1 package main 2 3 import ( 4 "net/http" 5 "os" 6 "strings" 7 "time" 8 ) 9 10 type FileInfo struct { 11 Name string 12 Size int64 13 ModTime time.Time 14 } 15 16 func (fi FileInfo) Name() string { 17 return fi.Name 18 } 19 20 func (fi FileInfo) Size() int64 { 21 return fi.Size 22 } 23 24 func (FileInfo) Mode() FileMode { 25 return os.FileMode 26 } 27 28 func (fi FileInfo) ModTime() time.Time { 29 return fi.ModTime 30 } 31 32 func (FileInfo) IsDir() bool { 33 return false 34 } 35 36 func (FileInfo) Sys() interface{} { 37 return nil 38 } 39 40 type File struct { 41 *strings.Reader 42 FI os.FileInfo 43 } 44 45 func (File) Close() error { 46 return nil 47 } 48 49 func (f *File) Readdir(_ int) ([]os.FileInfo, error) { 50 return make([]os.FileInfo, 0), nil 51 } 52 53 func (f *File) Stat() (os.FileInfo, error) { 54 return f.FI, nil 55 } 56 57 type FileSystem map[string]*File 58 59 func (fs FileSystem) Open(name string) (http.File, error) { 60 f, ok := fs[name] 61 if !ok { 62 return os.ErrNotExist 63 } 64 return f, nil 65 } 66 67 var fs = make(FileSystem)