12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273 |
- package vessel
- import (
- "io"
- "net/http"
- "os"
- "time"
- )
- // File implements an http.File
- type Dir struct {
- name string
- mode os.FileMode
- fs *FileSystem
- }
- // verify we implement the http.File interface
- var _ http.File = (*Dir)(nil)
- var _ os.FileInfo = (*Dir)(nil)
- // Readdir implements http.File
- func (f *Dir) Readdir(count int) ([]os.FileInfo, error) {
- files, err := f.fs.Dir(f.name)
- if err != nil {
- return nil, err
- }
- if len(files) < count {
- count = len(files)
- }
- return files[:count], nil
- }
- // Stat implements http.File
- func (f *Dir) Stat() (os.FileInfo, error) {
- return f, nil
- }
- // Seek implements io.Seeker
- func (f *Dir) Seek(offset int64, whence int) (int64, error) {
- return 0, os.ErrInvalid
- }
- // Read implements io.Reader
- func (f *Dir) Read(p []byte) (n int, err error) {
- return 0, io.EOF
- }
- // Close implements io.Closer
- func (f *Dir) Close() error {
- return nil
- }
- // implement file info interface as well
- func (f *Dir) Name() string {
- return f.name
- }
- func (f *Dir) Size() int64 {
- return 0
- }
- func (f *Dir) Mode() os.FileMode {
- return f.mode
- }
- func (f *Dir) ModTime() time.Time {
- return time.Now()
- }
- func (f *Dir) IsDir() bool {
- return true
- }
- func (f *Dir) Sys() interface{} {
- return nil
- }
|