-
Notifications
You must be signed in to change notification settings - Fork 29
/
provider.go
81 lines (67 loc) · 1.8 KB
/
provider.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
package magmasc
import (
"encoding/json"
"github.com/0chain/gosdk/core/util"
"github.com/0chain/gosdk/zmagmacore/config"
"github.com/0chain/gosdk/zmagmacore/errors"
"github.com/0chain/gosdk/zmagmacore/node"
)
type (
// Provider represents providers node stored in blockchain.
Provider struct {
ID string `json:"id"`
ExtID string `json:"ext_id"`
Host string `json:"host,omitempty"`
MinStake int64 `json:"min_stake,omitempty"`
}
)
var (
// Make sure Provider implements Serializable interface.
_ util.Serializable = (*Provider)(nil)
)
// NewProviderFromCfg creates Provider from config.Provider.
func NewProviderFromCfg(cfg *config.Provider) *Provider {
return &Provider{
ID: node.ID(),
ExtID: cfg.ExtID,
Host: cfg.Host,
MinStake: cfg.MinStake,
}
}
// Decode implements util.Serializable interface.
func (m *Provider) Decode(blob []byte) error {
var provider Provider
if err := json.Unmarshal(blob, &provider); err != nil {
return errDecodeData.Wrap(err)
}
if err := provider.Validate(); err != nil {
return err
}
m.ID = provider.ID
m.ExtID = provider.ExtID
m.Host = provider.Host
m.MinStake = provider.MinStake
return nil
}
// Encode implements util.Serializable interface.
func (m *Provider) Encode() []byte {
blob, _ := json.Marshal(m)
return blob
}
// GetType returns Provider's type.
func (m *Provider) GetType() string {
return providerType
}
// Validate checks Provider for correctness.
// If it is not return errInvalidProvider.
func (m *Provider) Validate() (err error) {
switch { // is invalid
case m.ExtID == "":
err = errors.New(errCodeBadRequest, "provider external id is required")
case m.Host == "":
err = errors.New(errCodeBadRequest, "provider host is required")
default:
return nil // is valid
}
return errInvalidProvider.Wrap(err)
}