/
ballot_fact_sign_json.go
79 lines (65 loc) · 1.93 KB
/
ballot_fact_sign_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
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
package base
import (
"encoding/json"
"fmt"
jsonenc "github.com/spikeekips/mitum/util/encoder/json"
"github.com/spikeekips/mitum/util/localtime"
)
type BaseBallotFactSignJSONPacker struct {
jsonenc.HintedHead
*BaseFactSignJSONPacker
*BaseBallotFactSignNodeJSONPacker
}
type BaseBallotFactSignNodeJSONPacker struct {
NO Address `json:"node"`
}
func (fs BaseBallotFactSign) MarshalJSON() ([]byte, error) {
return jsonenc.Marshal(BaseBallotFactSignJSONPacker{
HintedHead: jsonenc.NewHintedHead(fs.Hint()),
BaseFactSignJSONPacker: &BaseFactSignJSONPacker{
SN: fs.Signer(),
SG: fs.Signature(),
SA: localtime.NewTime(fs.SignedAt()),
},
BaseBallotFactSignNodeJSONPacker: &BaseBallotFactSignNodeJSONPacker{
NO: fs.node,
},
})
}
type BaseBallotFactSignNodeJSONUnpacker struct {
NO AddressDecoder `json:"node"`
}
func (fs *BaseBallotFactSign) UnpackJSON(b []byte, enc *jsonenc.Encoder) error {
var bfs BaseFactSign
if err := bfs.UnpackJSON(b, enc); err != nil {
return fmt.Errorf("failed to unpack ballot factsign: %w", err)
}
var bn BaseBallotFactSignNodeJSONUnpacker
if err := enc.Unmarshal(b, &bn); err != nil {
return fmt.Errorf("failed to unpack ballot fact sign: %w", err)
}
return fs.unpack(enc, bfs, bn.NO)
}
type BaseSignedBallotFactPackerJSON struct {
jsonenc.HintedHead
FC BallotFact `json:"fact"`
FS FactSign `json:"fact_sign"`
}
func (sfs BaseSignedBallotFact) MarshalJSON() ([]byte, error) {
return jsonenc.Marshal(BaseSignedBallotFactPackerJSON{
HintedHead: jsonenc.NewHintedHead(sfs.Hint()),
FC: sfs.fact,
FS: sfs.factSign,
})
}
type BaseSignedBallotFactUnpackJSON struct {
FC json.RawMessage `json:"fact"`
FS json.RawMessage `json:"fact_sign"`
}
func (sfs *BaseSignedBallotFact) UnpackJSON(b []byte, enc *jsonenc.Encoder) error {
var vpp BaseSignedBallotFactUnpackJSON
if err := enc.Unmarshal(b, &vpp); err != nil {
return err
}
return sfs.unpack(enc, vpp.FC, vpp.FS)
}