master
go 57 lines 1.03 KB
Raw
1 package coreunix
2
3 import (
4 dag "github.com/ipfs/boxo/ipld/merkledag"
5 ft "github.com/ipfs/boxo/ipld/unixfs"
6 cid "github.com/ipfs/go-cid"
7 core "github.com/ipfs/kubo/core"
8 )
9
10 func AddMetadataTo(n *core.IpfsNode, skey string, m *ft.Metadata) (string, error) {
11 c, err := cid.Decode(skey)
12 if err != nil {
13 return "", err
14 }
15
16 nd, err := n.DAG.Get(n.Context(), c)
17 if err != nil {
18 return "", err
19 }
20
21 mdnode := new(dag.ProtoNode)
22 mdata, err := ft.BytesForMetadata(m)
23 if err != nil {
24 return "", err
25 }
26
27 mdnode.SetData(mdata)
28 if err := mdnode.AddNodeLink("file", nd); err != nil {
29 return "", err
30 }
31
32 err = n.DAG.Add(n.Context(), mdnode)
33 if err != nil {
34 return "", err
35 }
36
37 return mdnode.Cid().String(), nil
38 }
39
40 func Metadata(n *core.IpfsNode, skey string) (*ft.Metadata, error) {
41 c, err := cid.Decode(skey)
42 if err != nil {
43 return nil, err
44 }
45
46 nd, err := n.DAG.Get(n.Context(), c)
47 if err != nil {
48 return nil, err
49 }
50
51 pbnd, ok := nd.(*dag.ProtoNode)
52 if !ok {
53 return nil, dag.ErrNotProtobuf
54 }
55
56 return ft.MetadataFromBytes(pbnd.Data())
57 }