github.com/keltia/go-ipfs@v0.3.8-0.20150909044612-210793031c63/commands/files/readerfile.go (about)

     1  package files
     2  
     3  import (
     4  	"errors"
     5  	"io"
     6  	"os"
     7  )
     8  
     9  // ReaderFile is a implementation of File created from an `io.Reader`.
    10  // ReaderFiles are never directories, and can be read from and closed.
    11  type ReaderFile struct {
    12  	filename string
    13  	fullpath string
    14  	reader   io.ReadCloser
    15  	stat     os.FileInfo
    16  }
    17  
    18  func NewReaderFile(filename, path string, reader io.ReadCloser, stat os.FileInfo) *ReaderFile {
    19  	return &ReaderFile{filename, path, reader, stat}
    20  }
    21  
    22  func (f *ReaderFile) IsDirectory() bool {
    23  	return false
    24  }
    25  
    26  func (f *ReaderFile) NextFile() (File, error) {
    27  	return nil, ErrNotDirectory
    28  }
    29  
    30  func (f *ReaderFile) FileName() string {
    31  	return f.filename
    32  }
    33  
    34  func (f *ReaderFile) FullPath() string {
    35  	return f.fullpath
    36  }
    37  
    38  func (f *ReaderFile) Read(p []byte) (int, error) {
    39  	return f.reader.Read(p)
    40  }
    41  
    42  func (f *ReaderFile) Close() error {
    43  	return f.reader.Close()
    44  }
    45  
    46  func (f *ReaderFile) Stat() os.FileInfo {
    47  	return f.stat
    48  }
    49  
    50  func (f *ReaderFile) Size() (int64, error) {
    51  	if f.stat == nil {
    52  		return 0, errors.New("File size unknown")
    53  	}
    54  	return f.stat.Size(), nil
    55  }