Documentation
¶
Overview ¶
Package mod provides DAG modification utilities to, for example, insert additional nodes in a unixfs DAG or truncate them.
Identity CID Handling:
This package automatically handles identity CIDs (multihash code 0x00) which inline data directly in the CID. When modifying nodes with identity CIDs, the package ensures the verifcid.MaxIdentityDigestSize limit is respected by automatically switching to a cryptographic hash function when the encoded data would exceed this limit. The replacement hash function is chosen from (in order): the configured Prefix if non-identity, or util.DefaultIpfsHash as a fallback. This prevents creation of unacceptably big identity CIDs while preserving them for small data that fits within the limit.
RawNode Growth:
When appending data to a RawNode that would require multiple blocks, the node is automatically converted to a UnixFS file structure. This is necessary because RawNodes cannot have child nodes. The original raw data remains accessible via its original CID, while the new structure provides full UnixFS capabilities.
Index ¶
- Variables
- type DagModifier
- func (dm *DagModifier) CtxReadFull(ctx context.Context, b []byte) (int, error)
- func (dm *DagModifier) GetNode() (ipld.Node, error)
- func (dm *DagModifier) HasChanges() bool
- func (dm *DagModifier) Read(b []byte) (int, error)
- func (dm *DagModifier) Seek(offset int64, whence int) (int64, error)
- func (dm *DagModifier) Size() (int64, error)
- func (dm *DagModifier) Sync() error
- func (dm *DagModifier) Truncate(size int64) error
- func (dm *DagModifier) Write(b []byte) (int, error)
- func (dm *DagModifier) WriteAt(b []byte, offset int64) (int, error)
Constants ¶
This section is empty.
Variables ¶
var ( ErrSeekFail = errors.New("failed to seek properly") ErrUnrecognizedWhence = errors.New("unrecognized whence") ErrNotUnixfs = errors.New("dagmodifier only supports unixfs nodes (proto or raw)") )
Common errors
Functions ¶
This section is empty.
Types ¶
type DagModifier ¶
type DagModifier struct {
Prefix cid.Prefix
RawLeaves bool
MaxLinks int
// contains filtered or unexported fields
}
DagModifier is the only struct licensed and able to correctly perform surgery on a DAG 'file' Dear god, please rename this to something more pleasant
func NewDagModifier ¶
func NewDagModifier(ctx context.Context, from ipld.Node, serv ipld.DAGService, spl chunker.SplitterGen) (*DagModifier, error)
NewDagModifier returns a new DagModifier, the Cid prefix for newly created nodes will be inherited from the passed in node. If the Cid version is not 0 raw leaves will also be enabled. The Prefix and RawLeaves options can be overridden by changing them after the call.
func (*DagModifier) CtxReadFull ¶
CtxReadFull reads data from this dag starting at the current offset
func (*DagModifier) GetNode ¶
func (dm *DagModifier) GetNode() (ipld.Node, error)
GetNode gets the modified DAG Node
func (*DagModifier) HasChanges ¶
func (dm *DagModifier) HasChanges() bool
HasChanges returned whether or not there are unflushed changes to this dag
func (*DagModifier) Read ¶
func (dm *DagModifier) Read(b []byte) (int, error)
Read data from this dag starting at the current offset
func (*DagModifier) Seek ¶
func (dm *DagModifier) Seek(offset int64, whence int) (int64, error)
Seek modifies the offset according to whence. See unixfs/io for valid whence values.
func (*DagModifier) Size ¶
func (dm *DagModifier) Size() (int64, error)
Size returns the Filesize of the node
func (*DagModifier) Sync ¶
func (dm *DagModifier) Sync() error
Sync writes changes to this dag to disk
func (*DagModifier) Truncate ¶
func (dm *DagModifier) Truncate(size int64) error
Truncate truncates the current Node to 'size' and replaces it with the new one.