/
genesis.go
107 lines (91 loc) · 3.38 KB
/
genesis.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
package genesis
import (
"context"
errorConstants "github.com/AssetMantle/schema/go/errors/constants"
"github.com/AssetMantle/schema/go/lists"
"github.com/AssetMantle/schema/go/lists/base"
sdkCodec "github.com/cosmos/cosmos-sdk/codec"
"github.com/AssetMantle/modules/helpers"
"github.com/AssetMantle/modules/x/orders/parameters"
"github.com/AssetMantle/modules/x/orders/record"
)
var _ helpers.Genesis = (*Genesis)(nil)
func (genesis *Genesis) Default() helpers.Genesis {
return Prototype()
}
func (genesis *Genesis) ValidateBasic(parameterManager helpers.ParameterManager) error {
if len(genesis.ParameterList.Get()) != len(genesis.Default().(*Genesis).ParameterList.Get()) {
return errorConstants.IncorrectFormat.Wrapf("expected %d parameters, got %d", len(genesis.Default().(*Genesis).ParameterList.Get()), len(genesis.ParameterList.Get()))
}
for _, parameter := range genesis.ParameterList.Get() {
var isPresent bool
for _, defaultParameter := range genesis.Default().(*Genesis).ParameterList.Get() {
isPresent = false
if defaultParameter.GetMetaProperty().Compare(parameter.GetMetaProperty()) == 0 {
isPresent = true
break
}
}
if !isPresent {
return errorConstants.IncorrectFormat.Wrapf("expected parameter %s not found", parameter.GetMetaProperty().GetKey().AsString())
}
if err := parameterManager.ValidateParameter(parameter); err != nil {
return err
}
}
for _, record := range genesis.Records {
if err := record.GetMappable().ValidateBasic(); err != nil {
return err
}
}
return nil
}
func (genesis *Genesis) Import(context context.Context, mapper helpers.Mapper, parameterManager helpers.ParameterManager) {
for _, record := range genesis.Records {
mapper.NewCollection(context).Add(record)
}
parameterManager.Set(context, genesis.ParameterList)
}
func (genesis *Genesis) Export(context context.Context, mapper helpers.Mapper, parameterManager helpers.ParameterManager) helpers.Genesis {
return genesis.Initialize(mapper.NewCollection(context).FetchAll().Get(), parameterManager.Fetch(context).Get())
}
func (genesis *Genesis) Encode(jsonCodec sdkCodec.JSONCodec) []byte {
bytes, err := jsonCodec.MarshalJSON(genesis)
if err != nil {
panic(err)
}
return bytes
}
func (genesis *Genesis) Decode(jsonCodec sdkCodec.JSONCodec, byte []byte) helpers.Genesis {
if err := jsonCodec.UnmarshalJSON(byte, genesis); err != nil {
panic(err)
}
return genesis
}
func (genesis *Genesis) Initialize(records []helpers.Record, parameterList lists.ParameterList) helpers.Genesis {
if len(records) == 0 {
genesis.Records = genesis.Default().(*Genesis).Records
} else {
genesis.Records = record.RecordsFromInterface(records)
}
if len(parameterList.Get()) == 0 {
genesis.ParameterList = genesis.Default().(*Genesis).ParameterList
} else {
parameters := parameterList.Get()
for _, defaultParameter := range genesis.Default().(*Genesis).ParameterList.Get() {
for i, parameter := range parameters {
if defaultParameter.GetMetaProperty().GetID().Compare(parameter.GetMetaProperty().GetID()) == 0 {
parameters[i] = defaultParameter.Mutate(parameter.GetMetaProperty().GetData())
}
}
}
genesis.ParameterList = base.NewParameterList(parameters...).(*base.ParameterList)
}
return genesis
}
func Prototype() helpers.Genesis {
return &Genesis{
Records: []*record.Record{},
ParameterList: parameters.Prototype().Get().(*base.ParameterList),
}
}