github.com/gocaveman/caveman@v0.0.0-20191211162744-0ddf99dbdf6e/filesystem/fsutil/fs-http-bindata.go (about)

     1  package fsutil
     2  
     3  import (
     4  	"bytes"
     5  	"net/http"
     6  	"os"
     7  	"path"
     8  	"strings"
     9  	"syscall"
    10  )
    11  
    12  type AssetFunc func(path string) ([]byte, error)
    13  type AssetDirFunc func(path string) ([]string, error)
    14  type AssetInfoFunc func(path string) (os.FileInfo, error)
    15  
    16  type HTTPBindataFs struct {
    17  	AssetFunc
    18  	AssetDirFunc
    19  	AssetInfoFunc
    20  	Prepend string // require this in front of a name request in order to satisfy it (i.e. make it appear like all files are under this dir)
    21  }
    22  
    23  func (fs *HTTPBindataFs) Open(name string) (http.File, error) {
    24  
    25  	name = strings.TrimPrefix(path.Clean("/"+name), "/")
    26  	name = strings.TrimPrefix(path.Clean("/"+strings.TrimPrefix(name, fs.Prepend)), "/")
    27  
    28  	data, err := fs.AssetFunc(name)
    29  	if err != nil {
    30  		return nil, err
    31  	}
    32  	return &HTTPBindataFile{name: name, Reader: bytes.NewReader(data), fs: fs}, nil
    33  }
    34  
    35  type HTTPBindataFile struct {
    36  	name string
    37  	*bytes.Reader
    38  	fs *HTTPBindataFs
    39  }
    40  
    41  func (f *HTTPBindataFile) Close() error { return nil }
    42  
    43  func (f *HTTPBindataFile) Name() string { return f.name }
    44  
    45  func (f *HTTPBindataFile) Readdir(int) ([]os.FileInfo, error) {
    46  	return nil, &os.SyscallError{
    47  		Syscall: "readdirent",
    48  		Err:     syscall.EINVAL,
    49  	}
    50  }
    51  
    52  func (f *HTTPBindataFile) Stat() (os.FileInfo, error) { return f.fs.AssetInfoFunc(f.name) }
    53  
    54  var _ http.File = &HTTPBindataFile{}