go-unixfs: github.com/ipfs/go-unixfs/io Index | Files

package io

import "github.com/ipfs/go-unixfs/io"

Package io implements convenience objects for working with the ipfs unixfs data format.

Index

Package Files

dagreader.go directory.go doc.go resolve.go

Variables

var (
    ErrIsDir            = errors.New("this dag node is a directory")
    ErrCantReadSymlinks = errors.New("cannot currently read symlinks")
    ErrUnkownNodeType   = errors.New("unknown node type")
    ErrSeekNotSupported = errors.New("file does not support seeking")
)

Common errors

var DefaultShardWidth = 256

DefaultShardWidth is the default value used for hamt sharding width.

var ErrNotADir = fmt.Errorf("merkledag node was not a directory or shard")

ErrNotADir implies that the given node was not a unixfs directory

var UseHAMTSharding = false

UseHAMTSharding is a global flag that signifies whether or not to use the HAMT sharding scheme for directory creation

func ResolveUnixfsOnce Uses

func ResolveUnixfsOnce(ctx context.Context, ds ipld.NodeGetter, nd ipld.Node, names []string) (*ipld.Link, []string, error)

ResolveUnixfsOnce resolves a single hop of a path through a graph in a unixfs context. This includes handling traversing sharded directories.

type BasicDirectory Uses

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

BasicDirectory is the basic implementation of `Directory`. All the entries are stored in a single node.

func (*BasicDirectory) AddChild Uses

func (d *BasicDirectory) AddChild(ctx context.Context, name string, node ipld.Node) error

AddChild implements the `Directory` interface. It adds (or replaces) a link to the given `node` under `name`.

func (*BasicDirectory) EnumLinksAsync Uses

func (d *BasicDirectory) EnumLinksAsync(ctx context.Context) <-chan format.LinkResult

EnumLinksAsync returns a channel which will receive Links in the directory as they are enumerated, where order is not gauranteed

func (*BasicDirectory) Find Uses

func (d *BasicDirectory) Find(ctx context.Context, name string) (ipld.Node, error)

Find implements the `Directory` interface.

func (d *BasicDirectory) ForEachLink(ctx context.Context, f func(*ipld.Link) error) error

ForEachLink implements the `Directory` interface.

func (*BasicDirectory) GetCidBuilder Uses

func (d *BasicDirectory) GetCidBuilder() cid.Builder

GetCidBuilder implements the `Directory` interface.

func (*BasicDirectory) GetNode Uses

func (d *BasicDirectory) GetNode() (ipld.Node, error)

GetNode implements the `Directory` interface.

func (d *BasicDirectory) Links(ctx context.Context) ([]*ipld.Link, error)

Links implements the `Directory` interface.

func (*BasicDirectory) RemoveChild Uses

func (d *BasicDirectory) RemoveChild(ctx context.Context, name string) error

RemoveChild implements the `Directory` interface.

func (*BasicDirectory) SetCidBuilder Uses

func (d *BasicDirectory) SetCidBuilder(builder cid.Builder)

SetCidBuilder implements the `Directory` interface.

func (*BasicDirectory) SwitchToSharding Uses

func (d *BasicDirectory) SwitchToSharding(ctx context.Context) (Directory, error)

SwitchToSharding returns a HAMT implementation of this directory.

type DagReader Uses

type DagReader interface {
    ReadSeekCloser
    Size() uint64
    CtxReadFull(context.Context, []byte) (int, error)
}

A DagReader provides read-only read and seek acess to a unixfs file. Different implementations of readers are used for the different types of unixfs/protobuf-encoded nodes.

func NewDagReader Uses

func NewDagReader(ctx context.Context, n ipld.Node, serv ipld.NodeGetter) (DagReader, error)

NewDagReader creates a new reader object that reads the data represented by the given node, using the passed in DAGService for data retrieval.

type Directory Uses

type Directory interface {

    // SetCidBuilder sets the CID Builder of the root node.
    SetCidBuilder(cid.Builder)

    // AddChild adds a (name, key) pair to the root node.
    AddChild(context.Context, string, ipld.Node) error

    // ForEachLink applies the given function to Links in the directory.
    ForEachLink(context.Context, func(*ipld.Link) error) error

    // EnumLinksAsync returns a channel which will receive Links in the directory
    // as they are enumerated, where order is not gauranteed
    EnumLinksAsync(context.Context) <-chan format.LinkResult

    // Links returns the all the links in the directory node.
    Links(context.Context) ([]*ipld.Link, error)

    // Find returns the root node of the file named 'name' within this directory.
    // In the case of HAMT-directories, it will traverse the tree.
    //
    // Returns os.ErrNotExist if the child does not exist.
    Find(context.Context, string) (ipld.Node, error)

    // RemoveChild removes the child with the given name.
    //
    // Returns os.ErrNotExist if the child doesn't exist.
    RemoveChild(context.Context, string) error

    // GetNode returns the root of this directory.
    GetNode() (ipld.Node, error)

    // GetCidBuilder returns the CID Builder used.
    GetCidBuilder() cid.Builder
}

Directory defines a UnixFS directory. It is used for creating, reading and editing directories. It allows to work with different directory schemes, like the basic or the HAMT implementation.

It just allows to perform explicit edits on a single directory, working with directory trees is out of its scope, they are managed by the MFS layer (which is the main consumer of this interface).

func NewDirectory Uses

func NewDirectory(dserv ipld.DAGService) Directory

NewDirectory returns a Directory. It needs a `DAGService` to add the children.

func NewDirectoryFromNode Uses

func NewDirectoryFromNode(dserv ipld.DAGService, node ipld.Node) (Directory, error)

NewDirectoryFromNode loads a unixfs directory from the given IPLD node and DAGService.

type HAMTDirectory Uses

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

HAMTDirectory is the HAMT implementation of `Directory`. (See package `hamt` for more information.)

func (*HAMTDirectory) AddChild Uses

func (d *HAMTDirectory) AddChild(ctx context.Context, name string, nd ipld.Node) error

AddChild implements the `Directory` interface.

func (*HAMTDirectory) EnumLinksAsync Uses

func (d *HAMTDirectory) EnumLinksAsync(ctx context.Context) <-chan format.LinkResult

EnumLinksAsync returns a channel which will receive Links in the directory as they are enumerated, where order is not gauranteed

func (*HAMTDirectory) Find Uses

func (d *HAMTDirectory) Find(ctx context.Context, name string) (ipld.Node, error)

Find implements the `Directory` interface. It will traverse the tree.

func (d *HAMTDirectory) ForEachLink(ctx context.Context, f func(*ipld.Link) error) error

ForEachLink implements the `Directory` interface.

func (*HAMTDirectory) GetCidBuilder Uses

func (d *HAMTDirectory) GetCidBuilder() cid.Builder

GetCidBuilder implements the `Directory` interface.

func (*HAMTDirectory) GetNode Uses

func (d *HAMTDirectory) GetNode() (ipld.Node, error)

GetNode implements the `Directory` interface.

func (d *HAMTDirectory) Links(ctx context.Context) ([]*ipld.Link, error)

Links implements the `Directory` interface.

func (*HAMTDirectory) RemoveChild Uses

func (d *HAMTDirectory) RemoveChild(ctx context.Context, name string) error

RemoveChild implements the `Directory` interface.

func (*HAMTDirectory) SetCidBuilder Uses

func (d *HAMTDirectory) SetCidBuilder(builder cid.Builder)

SetCidBuilder implements the `Directory` interface.

type ReadSeekCloser Uses

type ReadSeekCloser interface {
    io.Reader
    io.Seeker
    io.Closer
    io.WriterTo
}

A ReadSeekCloser implements interfaces to read, copy, seek and close.

Package io imports 11 packages (graph) and is imported by 39 packages. Updated 2020-01-22. Refresh now. Tools for package owners.