forked from ipfs-cluster/ipfs-cluster
/
params.go
117 lines (103 loc) · 2.51 KB
/
params.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
package adder
import (
"errors"
"fmt"
"net/url"
"strconv"
"github.com/ipfs/ipfs-cluster/api"
)
// DefaultShardSize is the shard size for params objects created with DefaultParams().
var DefaultShardSize = uint64(100 * 1024 * 1024) // 100 MB
// Params contains all of the configurable parameters needed to specify the
// importing process of a file being added to an ipfs-cluster
type Params struct {
api.PinOptions
Layout string
Chunker string
RawLeaves bool
Hidden bool
Shard bool
}
// DefaultParams returns a Params object with standard defaults
func DefaultParams() *Params {
return &Params{
Layout: "", // corresponds to balanced layout
Chunker: "",
RawLeaves: false,
Hidden: false,
Shard: false,
PinOptions: api.PinOptions{
ReplicationFactorMin: 0,
ReplicationFactorMax: 0,
Name: "",
ShardSize: DefaultShardSize,
},
}
}
func parseBoolParam(q url.Values, name string, dest *bool) error {
if v := q.Get(name); v != "" {
b, err := strconv.ParseBool(v)
if err != nil {
return fmt.Errorf("parameter %s invalid", name)
}
*dest = b
}
return nil
}
func parseIntParam(q url.Values, name string, dest *int) error {
if v := q.Get(name); v != "" {
i, err := strconv.Atoi(v)
if err != nil {
return fmt.Errorf("parameter %s invalid", name)
}
*dest = i
}
return nil
}
// ParamsFromQuery parses the Params object from
// a URL.Query().
func ParamsFromQuery(query url.Values) (*Params, error) {
params := DefaultParams()
layout := query.Get("layout")
switch layout {
case "trickle":
case "balanced":
case "":
// nothing
default:
return nil, errors.New("parameter trickle invalid")
}
params.Layout = layout
chunker := query.Get("chunker")
params.Chunker = chunker
name := query.Get("name")
params.Name = name
err := parseBoolParam(query, "raw", ¶ms.RawLeaves)
if err != nil {
return nil, err
}
err = parseBoolParam(query, "hidden", ¶ms.Hidden)
if err != nil {
return nil, err
}
err = parseBoolParam(query, "shard", ¶ms.Shard)
if err != nil {
return nil, err
}
err = parseIntParam(query, "repl_min", ¶ms.ReplicationFactorMin)
if err != nil {
return nil, err
}
err = parseIntParam(query, "repl_max", ¶ms.ReplicationFactorMax)
if err != nil {
return nil, err
}
if v := query.Get("shard_size"); v != "" {
shardSize, err := strconv.ParseUint(v, 10, 64)
if err != nil {
return nil, errors.New("parameter shard_size is invalid")
}
params.ShardSize = shardSize
}
return params, nil
}