files

package
v0.0.0-...-ce94876 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jan 1, 2019 License: MIT, MIT Imports: 16 Imported by: 0

README

go-ipfs-files

standard-readme compliant

File interfaces and utils used in IPFS

Documentation

https://godoc.org/github.com/ipfs/go-ipfs-files

Contribute

Feel free to join in. All welcome. Open an issue!

This repository falls under the IPFS Code of Conduct.

Want to hack on IPFS?

License

MIT

Documentation

Index

Constants

This section is empty.

Variables

View Source
var (
	ErrNotDirectory = errors.New("file isn't a directory")
	ErrNotReader    = errors.New("file isn't a regular file")

	ErrNotSupported = errors.New("operation not supported")
)
View Source
var ErrPartInChildTree = errors.New("file in child tree")
View Source
var ErrPartOutsideParent = errors.New("file outside parent dir")

Functions

func IsHidden

func IsHidden(name string, f Node) bool

Types

type DirEntry

type DirEntry interface {
	// Name returns base name of this entry, which is the base name of referenced
	// file
	Name() string

	// Node returns the file referenced by this DirEntry
	Node() Node
}

DirEntry exposes information about a directory entry

func FileEntry

func FileEntry(name string, file Node) DirEntry

type DirIterator

type DirIterator interface {
	// DirEntry holds information about current directory entry.
	// Note that after creating new iterator you MUST call Next() at least once
	// before accessing these methods. Calling these methods without prior calls
	// to Next() and after Next() returned false may result in undefined behavior
	DirEntry

	// Next advances iterator to the next file.
	Next() bool

	// Err may return an error after previous call to Next() returned `false`.
	// If previous call to Next() returned `true`, Err() is guaranteed to
	// return nil
	Err() error
}

DirIterator is a iterator over directory entries. See Directory.Entries for more

type Directory

type Directory interface {
	Node

	// Entries returns a stateful iterator over directory entries.
	//
	// Example usage:
	//
	// it := dir.Entries()
	// for it.Next() {
	//   name := it.Name()
	//   file := it.Node()
	//   [...]
	// }
	// if it.Err() != nil {
	//   return err
	// }
	//
	// Note that you can't store the result of it.Node() and use it after
	// advancing the iterator
	Entries() DirIterator
}

Directory is a special file which can link to any number of files.

func DirFromEntry

func DirFromEntry(e DirEntry) Directory

DirFromEntry calls ToDir on Node in the given entry

func NewFileFromPartReader

func NewFileFromPartReader(reader *multipart.Reader, mediatype string) (Directory, error)

func NewMapDirectory

func NewMapDirectory(f map[string]Node) Directory

func NewSliceDirectory

func NewSliceDirectory(files []DirEntry) Directory

func ToDir

func ToDir(n Node) Directory

ToDir is an alias for n.(Directory). If the file isn't directory, a nil value will be returned

type File

type File interface {
	Node

	io.Reader
	io.Seeker
}

Node represents a regular Unix file

func FileFromEntry

func FileFromEntry(e DirEntry) File

FileFromEntry calls ToFile on Node in the given entry

func NewBytesFile

func NewBytesFile(b []byte) File

func NewLinkFile

func NewLinkFile(target string, stat os.FileInfo) File

func NewReaderFile

func NewReaderFile(reader io.Reader) File

func NewReaderStatFile

func NewReaderStatFile(reader io.Reader, stat os.FileInfo) File

func ToFile

func ToFile(n Node) File

ToFile is an alias for n.(File). If the file isn't a regular file, nil value will be returned

type FileInfo

type FileInfo interface {
	Node

	// AbsPath returns full real file path.
	AbsPath() string

	// Stat returns os.Stat of this file, may be nil for some files
	Stat() os.FileInfo
}

FileInfo exposes information on files in local filesystem

type MultiFileReader

type MultiFileReader struct {
	io.Reader
	// contains filtered or unexported fields
}

MultiFileReader reads from a `commands.Node` (which can be a directory of files or a regular file) as HTTP multipart encoded data.

func NewMultiFileReader

func NewMultiFileReader(file Directory, form bool) *MultiFileReader

NewMultiFileReader constructs a MultiFileReader. `file` can be any `commands.Directory`. If `form` is set to true, the multipart data will have a Content-Type of 'multipart/form-data', if `form` is false, the Content-Type will be 'multipart/mixed'.

func (*MultiFileReader) Boundary

func (mfr *MultiFileReader) Boundary() string

Boundary returns the boundary string to be used to separate files in the multipart data

func (*MultiFileReader) Read

func (mfr *MultiFileReader) Read(buf []byte) (written int, err error)

type Node

type Node interface {
	io.Closer

	// Size returns size of this file (if this file is a directory, total size of
	// all files stored in the tree should be returned). Some implementations may
	// choose not to implement this
	Size() (int64, error)
}

Node is a common interface for files, directories and other special files

func NewSerialFile

func NewSerialFile(path string, hidden bool, stat os.FileInfo) (Node, error)

TODO: test/document limitations

type PartReader

type PartReader interface {
	NextPart() (*multipart.Part, error)
}

type ReaderFile

type ReaderFile struct {
	// contains filtered or unexported fields
}

ReaderFile is a implementation of File created from an `io.Reader`. ReaderFiles are never directories, and can be read from and closed.

func NewReaderPathFile

func NewReaderPathFile(path string, reader io.ReadCloser, stat os.FileInfo) (*ReaderFile, error)

func (*ReaderFile) AbsPath

func (f *ReaderFile) AbsPath() string

func (*ReaderFile) Close

func (f *ReaderFile) Close() error

func (*ReaderFile) Read

func (f *ReaderFile) Read(p []byte) (int, error)

func (*ReaderFile) Seek

func (f *ReaderFile) Seek(offset int64, whence int) (int64, error)

func (*ReaderFile) Size

func (f *ReaderFile) Size() (int64, error)

func (*ReaderFile) Stat

func (f *ReaderFile) Stat() os.FileInfo

type SliceFile

type SliceFile struct {
	// contains filtered or unexported fields
}

SliceFile implements Node, and provides simple directory handling. It contains children files, and is created from a `[]Node`. SliceFiles are always directories, and can't be read from or closed.

func (*SliceFile) Close

func (f *SliceFile) Close() error

func (*SliceFile) Entries

func (f *SliceFile) Entries() DirIterator

func (*SliceFile) Length

func (f *SliceFile) Length() int

func (*SliceFile) Size

func (f *SliceFile) Size() (int64, error)
type Symlink struct {
	Target string
	// contains filtered or unexported fields
}
func ToSymlink(n Node) *Symlink

func (*Symlink) Close

func (lf *Symlink) Close() error

func (*Symlink) Read

func (lf *Symlink) Read(b []byte) (int, error)

func (*Symlink) Seek

func (lf *Symlink) Seek(offset int64, whence int) (int64, error)

func (*Symlink) Size

func (lf *Symlink) Size() (int64, error)

type WebFile

type WebFile struct {
	// contains filtered or unexported fields
}

WebFile is an implementation of File which reads it from a Web URL (http). A GET request will be performed against the source when calling Read().

func NewWebFile

func NewWebFile(url *url.URL) *WebFile

NewWebFile creates a WebFile with the given URL, which will be used to perform the GET request on Read().

func (*WebFile) Close

func (wf *WebFile) Close() error

Close closes the WebFile (or the request body).

func (*WebFile) Read

func (wf *WebFile) Read(b []byte) (int, error)

Read reads the File from it's web location. On the first call to Read, a GET request will be performed against the WebFile's URL, using Go's default HTTP client. Any further reads will keep reading from the HTTP Request body.

func (*WebFile) Seek

func (wf *WebFile) Seek(offset int64, whence int) (int64, error)

TODO: implement

func (*WebFile) Size

func (wf *WebFile) Size() (int64, error)

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL