/
currency_design_json.go
46 lines (39 loc) · 1.29 KB
/
currency_design_json.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
package types
import (
"encoding/json"
"github.com/ProtoconNet/mitum2/base"
"github.com/ProtoconNet/mitum2/util"
"github.com/ProtoconNet/mitum2/util/encoder"
"github.com/ProtoconNet/mitum2/util/hint"
)
type CurrencyDesignJSONMarshaler struct {
hint.BaseHinter
Amount Amount `json:"amount"`
Genesis base.Address `json:"genesis_account"`
Policy CurrencyPolicy `json:"policy"`
Aggregate string `json:"aggregate"`
}
func (de CurrencyDesign) MarshalJSON() ([]byte, error) {
return util.MarshalJSON(CurrencyDesignJSONMarshaler{
BaseHinter: de.BaseHinter,
Amount: de.amount,
Genesis: de.genesisAccount,
Policy: de.policy,
Aggregate: de.aggregate.String(),
})
}
type CurrencyDesignJSONUnmarshaler struct {
Hint hint.Hint `json:"_hint"`
Amount json.RawMessage `json:"amount"`
Genesis string `json:"genesis_account"`
Policy json.RawMessage `json:"policy"`
Aggregate string `json:"aggregate"`
}
func (de *CurrencyDesign) DecodeJSON(b []byte, enc encoder.Encoder) error {
e := util.StringError("decode json of CurrencyDesign")
var ude CurrencyDesignJSONUnmarshaler
if err := enc.Unmarshal(b, &ude); err != nil {
return e.Wrap(err)
}
return de.unpack(enc, ude.Hint, ude.Amount, ude.Genesis, ude.Policy, ude.Aggregate)
}