Skip to content

Commit c2dd400

Browse files
committed
coreapi: move path impl to path.go
License: MIT Signed-off-by: Łukasz Magiera <[email protected]>
1 parent bb005c7 commit c2dd400

File tree

2 files changed

+108
-101
lines changed

2 files changed

+108
-101
lines changed

core/coreapi/coreapi.go

Lines changed: 0 additions & 101 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,9 @@
11
package coreapi
22

33
import (
4-
"context"
5-
64
core "github.com/ipfs/go-ipfs/core"
75
coreiface "github.com/ipfs/go-ipfs/core/coreapi/interface"
86
caopts "github.com/ipfs/go-ipfs/core/coreapi/interface/options"
9-
namesys "github.com/ipfs/go-ipfs/namesys"
10-
ipfspath "github.com/ipfs/go-ipfs/path"
11-
uio "github.com/ipfs/go-ipfs/unixfs/io"
12-
13-
cid "gx/ipfs/QmcZfnkapfECQGcLZaf9B79NRg7cRa9EnZh4LSbkCzwNvY/go-cid"
14-
ipld "gx/ipfs/Qme5bWv7wtjUNGsK2BNGVUFPKiuxWrsqrtvYwCLRw8YFES/go-ipld-format"
157
)
168

179
type CoreAPI struct {
@@ -57,96 +49,3 @@ func (api *CoreAPI) Object() coreiface.ObjectAPI {
5749
func (api *CoreAPI) Pin() coreiface.PinAPI {
5850
return &PinAPI{api, nil}
5951
}
60-
61-
// ResolveNode resolves the path `p` using Unixfx resolver, gets and returns the
62-
// resolved Node.
63-
func (api *CoreAPI) ResolveNode(ctx context.Context, p coreiface.Path) (coreiface.Node, error) {
64-
return resolveNode(ctx, api.node.DAG, api.node.Namesys, p)
65-
}
66-
67-
func resolveNode(ctx context.Context, ng ipld.NodeGetter, nsys namesys.NameSystem, p coreiface.Path) (coreiface.Node, error) {
68-
p, err := resolvePath(ctx, ng, nsys, p)
69-
if err != nil {
70-
return nil, err
71-
}
72-
73-
node, err := ng.Get(ctx, p.Cid())
74-
if err != nil {
75-
return nil, err
76-
}
77-
return node, nil
78-
}
79-
80-
// ResolvePath resolves the path `p` using Unixfs resolver, returns the
81-
// resolved path.
82-
// TODO: store all of ipfspath.Resolver.ResolvePathComponents() in Path
83-
func (api *CoreAPI) ResolvePath(ctx context.Context, p coreiface.Path) (coreiface.Path, error) {
84-
return resolvePath(ctx, api.node.DAG, api.node.Namesys, p)
85-
}
86-
87-
func resolvePath(ctx context.Context, ng ipld.NodeGetter, nsys namesys.NameSystem, p coreiface.Path) (coreiface.Path, error) {
88-
if p.Resolved() {
89-
return p, nil
90-
}
91-
92-
r := &ipfspath.Resolver{
93-
DAG: ng,
94-
ResolveOnce: uio.ResolveUnixfsOnce,
95-
}
96-
97-
p2 := ipfspath.FromString(p.String())
98-
node, err := core.Resolve(ctx, nsys, r, p2)
99-
if err == core.ErrNoNamesys {
100-
return nil, coreiface.ErrOffline
101-
} else if err != nil {
102-
return nil, err
103-
}
104-
105-
var root *cid.Cid
106-
if p2.IsJustAKey() {
107-
root = node.Cid()
108-
}
109-
110-
return ResolvedPath(p.String(), node.Cid(), root), nil
111-
}
112-
113-
// Implements coreiface.Path
114-
type path struct {
115-
path ipfspath.Path
116-
cid *cid.Cid
117-
root *cid.Cid
118-
}
119-
120-
// ParsePath parses path `p` using ipfspath parser, returns the parsed path.
121-
func (api *CoreAPI) ParsePath(ctx context.Context, p string, opts ...caopts.ParsePathOption) (coreiface.Path, error) {
122-
options, err := caopts.ParsePathOptions(opts...)
123-
if err != nil {
124-
return nil, err
125-
}
126-
127-
pp, err := ipfspath.ParsePath(p)
128-
if err != nil {
129-
return nil, err
130-
}
131-
132-
res := &path{path: pp}
133-
if options.Resolve {
134-
return api.ResolvePath(ctx, res)
135-
}
136-
return res, nil
137-
}
138-
139-
// ParseCid parses the path from `c`, retruns the parsed path.
140-
func (api *CoreAPI) ParseCid(c *cid.Cid) coreiface.Path {
141-
return &path{path: ipfspath.FromCid(c), cid: c, root: c}
142-
}
143-
144-
// ResolvePath parses path from string `p`, returns parsed path.
145-
func ResolvedPath(p string, c *cid.Cid, r *cid.Cid) coreiface.Path {
146-
return &path{path: ipfspath.FromString(p), cid: c, root: r}
147-
}
148-
149-
func (p *path) String() string { return p.path.String() }
150-
func (p *path) Cid() *cid.Cid { return p.cid }
151-
func (p *path) Root() *cid.Cid { return p.root }
152-
func (p *path) Resolved() bool { return p.cid != nil }

core/coreapi/path.go

Lines changed: 108 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,108 @@
1+
package coreapi
2+
3+
import (
4+
"context"
5+
6+
core "github.com/ipfs/go-ipfs/core"
7+
coreiface "github.com/ipfs/go-ipfs/core/coreapi/interface"
8+
caopts "github.com/ipfs/go-ipfs/core/coreapi/interface/options"
9+
namesys "github.com/ipfs/go-ipfs/namesys"
10+
ipfspath "github.com/ipfs/go-ipfs/path"
11+
uio "github.com/ipfs/go-ipfs/unixfs/io"
12+
13+
cid "gx/ipfs/QmcZfnkapfECQGcLZaf9B79NRg7cRa9EnZh4LSbkCzwNvY/go-cid"
14+
ipld "gx/ipfs/Qme5bWv7wtjUNGsK2BNGVUFPKiuxWrsqrtvYwCLRw8YFES/go-ipld-format"
15+
)
16+
17+
// ResolveNode resolves the path `p` using Unixfx resolver, gets and returns the
18+
// resolved Node.
19+
func (api *CoreAPI) ResolveNode(ctx context.Context, p coreiface.Path) (coreiface.Node, error) {
20+
return resolveNode(ctx, api.node.DAG, api.node.Namesys, p)
21+
}
22+
23+
func resolveNode(ctx context.Context, ng ipld.NodeGetter, nsys namesys.NameSystem, p coreiface.Path) (coreiface.Node, error) {
24+
p, err := resolvePath(ctx, ng, nsys, p)
25+
if err != nil {
26+
return nil, err
27+
}
28+
29+
node, err := ng.Get(ctx, p.Cid())
30+
if err != nil {
31+
return nil, err
32+
}
33+
return node, nil
34+
}
35+
36+
// ResolvePath resolves the path `p` using Unixfs resolver, returns the
37+
// resolved path.
38+
// TODO: store all of ipfspath.Resolver.ResolvePathComponents() in Path
39+
func (api *CoreAPI) ResolvePath(ctx context.Context, p coreiface.Path) (coreiface.Path, error) {
40+
return resolvePath(ctx, api.node.DAG, api.node.Namesys, p)
41+
}
42+
43+
func resolvePath(ctx context.Context, ng ipld.NodeGetter, nsys namesys.NameSystem, p coreiface.Path) (coreiface.Path, error) {
44+
if p.Resolved() {
45+
return p, nil
46+
}
47+
48+
r := &ipfspath.Resolver{
49+
DAG: ng,
50+
ResolveOnce: uio.ResolveUnixfsOnce,
51+
}
52+
53+
p2 := ipfspath.FromString(p.String())
54+
node, err := core.Resolve(ctx, nsys, r, p2)
55+
if err == core.ErrNoNamesys {
56+
return nil, coreiface.ErrOffline
57+
} else if err != nil {
58+
return nil, err
59+
}
60+
61+
var root *cid.Cid
62+
if p2.IsJustAKey() {
63+
root = node.Cid()
64+
}
65+
66+
return ResolvedPath(p.String(), node.Cid(), root), nil
67+
}
68+
69+
// Implements coreiface.Path
70+
type path struct {
71+
path ipfspath.Path
72+
cid *cid.Cid
73+
root *cid.Cid
74+
}
75+
76+
// ParsePath parses path `p` using ipfspath parser, returns the parsed path.
77+
func (api *CoreAPI) ParsePath(ctx context.Context, p string, opts ...caopts.ParsePathOption) (coreiface.Path, error) {
78+
options, err := caopts.ParsePathOptions(opts...)
79+
if err != nil {
80+
return nil, err
81+
}
82+
83+
pp, err := ipfspath.ParsePath(p)
84+
if err != nil {
85+
return nil, err
86+
}
87+
88+
res := &path{path: pp}
89+
if options.Resolve {
90+
return api.ResolvePath(ctx, res)
91+
}
92+
return res, nil
93+
}
94+
95+
// ParseCid parses the path from `c`, retruns the parsed path.
96+
func (api *CoreAPI) ParseCid(c *cid.Cid) coreiface.Path {
97+
return &path{path: ipfspath.FromCid(c), cid: c, root: c}
98+
}
99+
100+
// ResolvePath parses path from string `p`, returns parsed path.
101+
func ResolvedPath(p string, c *cid.Cid, r *cid.Cid) coreiface.Path {
102+
return &path{path: ipfspath.FromString(p), cid: c, root: r}
103+
}
104+
105+
func (p *path) String() string { return p.path.String() }
106+
func (p *path) Cid() *cid.Cid { return p.cid }
107+
func (p *path) Root() *cid.Cid { return p.root }
108+
func (p *path) Resolved() bool { return p.cid != nil }

0 commit comments

Comments
 (0)