mirror of
https://github.com/eosswedenorg/thalos
synced 2026-06-16 04:24:56 +02:00
Adding api/message/msgpack
This commit is contained in:
parent
f3900bc262
commit
2e8c228076
5 changed files with 432 additions and 0 deletions
|
|
@ -6,6 +6,8 @@ require (
|
|||
github.com/alicebob/miniredis/v2 v2.30.2
|
||||
github.com/go-redis/redis/v8 v8.11.5
|
||||
github.com/go-redis/redismock/v8 v8.11.5
|
||||
github.com/shamaton/msgpack/v2 v2.1.0
|
||||
github.com/shamaton/msgpackgen v0.3.0
|
||||
github.com/stretchr/testify v1.8.2
|
||||
)
|
||||
|
||||
|
|
|
|||
|
|
@ -7,6 +7,7 @@ github.com/cespare/xxhash/v2 v2.1.2/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XL
|
|||
github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWRnGsAI=
|
||||
github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e/go.mod h1:nSuG5e5PlCu98SY8svDHJxuZscDgtXS6KTTbou5AhLI=
|
||||
github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod h1:Q3SI9o4m/ZMnBNeIyt5eFwwo7qiLfzFZmjNmxjkiQlU=
|
||||
github.com/dave/jennifer v1.4.1/go.mod h1:7jEdnm+qBcxl8PC0zyp7vxcpSRnzXSt9r39tpTVGlwA=
|
||||
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
|
||||
github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
|
||||
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
|
||||
|
|
@ -52,6 +53,10 @@ github.com/onsi/gomega v1.18.1 h1:M1GfJqGRrBrrGGsbxzV5dqM2U2ApXefZCQpkukxYRLE=
|
|||
github.com/onsi/gomega v1.18.1/go.mod h1:0q+aL8jAiMXy9hbwj2mr5GziHiwhAIQpFmmtT5hitRs=
|
||||
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
|
||||
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
|
||||
github.com/shamaton/msgpack/v2 v2.1.0 h1:9jJ2eGZw2Wa9KExPX3KaDDckVjgr4zhXGFCfWagUWqg=
|
||||
github.com/shamaton/msgpack/v2 v2.1.0/go.mod h1:aTUEmh31ziGX1Ml7wMPLVY0f4vT3CRsCvZRoSCs+VGg=
|
||||
github.com/shamaton/msgpackgen v0.3.0 h1:q6o7prOEJFdF9BAPgkOtfzJbs55pQi7g44RUnEVUxtM=
|
||||
github.com/shamaton/msgpackgen v0.3.0/go.mod h1:fd99fDDuxuTiWzkHC59uEGzrt/WDu+ltGZTbEWwVXIc=
|
||||
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
|
||||
github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw=
|
||||
github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo=
|
||||
|
|
|
|||
18
api/message/msgpack/codec.go
Normal file
18
api/message/msgpack/codec.go
Normal file
|
|
@ -0,0 +1,18 @@
|
|||
package msgpack
|
||||
|
||||
import (
|
||||
"github.com/shamaton/msgpack/v2"
|
||||
|
||||
"github.com/eosswedenorg/thalos/api/message"
|
||||
)
|
||||
|
||||
//go:generate go run github.com/shamaton/msgpackgen -v -input-file ../types.go -output-file msgpack.go
|
||||
|
||||
func init() {
|
||||
RegisterGeneratedResolver()
|
||||
|
||||
message.RegisterCodec("msgpack", message.Codec{
|
||||
Encoder: msgpack.Marshal,
|
||||
Decoder: msgpack.Unmarshal,
|
||||
})
|
||||
}
|
||||
106
api/message/msgpack/codec_test.go
Normal file
106
api/message/msgpack/codec_test.go
Normal file
|
|
@ -0,0 +1,106 @@
|
|||
package msgpack
|
||||
|
||||
import (
|
||||
"testing"
|
||||
|
||||
"github.com/eosswedenorg/thalos/api/message"
|
||||
"github.com/shamaton/msgpack/v2"
|
||||
"github.com/stretchr/testify/assert"
|
||||
)
|
||||
|
||||
func TestMsgpack_EncodeActionTrace(t *testing.T) {
|
||||
RegisterGeneratedResolver()
|
||||
|
||||
msg := message.ActionTrace{
|
||||
TxID: "edc06dce6320459fd644756972048da453b2816b0a434c37ddffde36778dcab3",
|
||||
Name: "sellitem",
|
||||
Contract: "mygame",
|
||||
Receiver: "eosio",
|
||||
Data: map[interface{}]interface{}{
|
||||
"item": map[interface{}]interface{}{
|
||||
"id": "2131242",
|
||||
"name": "Great Sword",
|
||||
"str": "100",
|
||||
"agi": "20",
|
||||
"dur": "100",
|
||||
"qual": "epic",
|
||||
},
|
||||
"from": "account1",
|
||||
"to": "account2",
|
||||
"amount": "1000.0000 SCAM",
|
||||
},
|
||||
HexData: "d0fa1b2ab8a6fd0d1b0173df91aa9ffd277642d05780cf750",
|
||||
}
|
||||
|
||||
data, err := msgpack.Marshal(msg)
|
||||
assert.NoError(t, err)
|
||||
|
||||
res := message.ActionTrace{}
|
||||
err = msgpack.Unmarshal(data, &res)
|
||||
assert.NoError(t, err)
|
||||
|
||||
assert.Equal(t, msg, res)
|
||||
}
|
||||
|
||||
func TestMsgpack_Decode(t *testing.T) {
|
||||
RegisterGeneratedResolver()
|
||||
|
||||
data := []byte("\x86\xa5tx_id\xd9@edc06dce6320459fd644756972048da453b2816b0a434c37ddffde36778dcab3\xa4name\xa8sellitem\xa8contract\xa6mygame\xa8receiver\xa5eosio\xa4data\x84\xa4item\x86\xa4name\xabGreat Sword\xa3str\xa3100\xa3agi\xa220\xa3dur\xa3100\xa4qual\xa4epic\xa2id\xa72131242\xa4from\xa8account1\xa2to\xa8account2\xa6amount\xae1000.0000 SCAM\xa8hex_data\xd91d0fa1b2ab8a6fd0d1b0173df91aa9ffd277642d05780cf750")
|
||||
|
||||
expected := message.ActionTrace{
|
||||
TxID: "edc06dce6320459fd644756972048da453b2816b0a434c37ddffde36778dcab3",
|
||||
Name: "sellitem",
|
||||
Contract: "mygame",
|
||||
Receiver: "eosio",
|
||||
Data: map[interface{}]interface{}{
|
||||
"item": map[interface{}]interface{}{
|
||||
"id": "2131242",
|
||||
"name": "Great Sword",
|
||||
"str": "100",
|
||||
"agi": "20",
|
||||
"dur": "100",
|
||||
"qual": "epic",
|
||||
},
|
||||
"from": "account1",
|
||||
"to": "account2",
|
||||
"amount": "1000.0000 SCAM",
|
||||
},
|
||||
HexData: "d0fa1b2ab8a6fd0d1b0173df91aa9ffd277642d05780cf750",
|
||||
}
|
||||
|
||||
res := message.ActionTrace{}
|
||||
err := msgpack.Unmarshal(data, &res)
|
||||
assert.NoError(t, err)
|
||||
|
||||
assert.Equal(t, res, expected)
|
||||
}
|
||||
|
||||
func TestMsgpack_EncodeHeartbeat(t *testing.T) {
|
||||
RegisterGeneratedResolver()
|
||||
|
||||
msg := message.HeartBeat{
|
||||
BlockNum: 1234,
|
||||
HeadBlockNum: 1235,
|
||||
LastIrreversibleBlockNum: 1236,
|
||||
}
|
||||
|
||||
data, err := msgpack.Marshal(msg)
|
||||
assert.NoError(t, err)
|
||||
|
||||
assert.Equal(t, data, []byte{0x83, 0xa8, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x6e, 0x75, 0x6d, 0xcd, 0x4, 0xd2, 0xad, 0x68, 0x65, 0x61, 0x64, 0x5f, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x6e, 0x75, 0x6d, 0xcd, 0x4, 0xd3, 0xba, 0x6c, 0x61, 0x73, 0x74, 0x5f, 0x69, 0x72, 0x72, 0x65, 0x76, 0x65, 0x72, 0x73, 0x69, 0x62, 0x6c, 0x65, 0x5f, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x6e, 0x75, 0x6d, 0xcd, 0x4, 0xd4})
|
||||
}
|
||||
|
||||
func TestMsgpack_DecodeHeartbeat(t *testing.T) {
|
||||
data := []byte{0x83, 0xa8, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x6e, 0x75, 0x6d, 0xcd, 0x03, 0xe8, 0xad, 0x68, 0x65, 0x61, 0x64, 0x5f, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x6e, 0x75, 0x6d, 0xcd, 0x0b, 0xb8, 0xba, 0x6c, 0x61, 0x73, 0x74, 0x5f, 0x69, 0x72, 0x72, 0x65, 0x76, 0x65, 0x72, 0x73, 0x69, 0x62, 0x6c, 0x65, 0x5f, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x6e, 0x75, 0x6d, 0xcd, 0x04, 0x06}
|
||||
|
||||
expected := message.HeartBeat{
|
||||
BlockNum: 1000,
|
||||
HeadBlockNum: 3000,
|
||||
LastIrreversibleBlockNum: 1030,
|
||||
}
|
||||
|
||||
msg := message.HeartBeat{}
|
||||
err := msgpack.Unmarshal(data, &msg)
|
||||
assert.NoError(t, err)
|
||||
assert.Equal(t, expected, msg)
|
||||
}
|
||||
301
api/message/msgpack/msgpack.go
Normal file
301
api/message/msgpack/msgpack.go
Normal file
|
|
@ -0,0 +1,301 @@
|
|||
// Code generated by msgpackgen. DO NOT EDIT.
|
||||
|
||||
package msgpack
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
message "github.com/eosswedenorg/thalos/api/message"
|
||||
msgpack "github.com/shamaton/msgpackgen/msgpack"
|
||||
dec "github.com/shamaton/msgpackgen/msgpack/dec"
|
||||
enc "github.com/shamaton/msgpackgen/msgpack/enc"
|
||||
)
|
||||
|
||||
// RegisterGeneratedResolver registers generated resolver.
|
||||
func RegisterGeneratedResolver() {
|
||||
msgpack.SetResolver(___encodeAsMap, ___encodeAsArray, ___decodeAsMap, ___decodeAsArray)
|
||||
}
|
||||
|
||||
// encode
|
||||
func ___encode(i interface{}) ([]byte, error) {
|
||||
if msgpack.StructAsArray() {
|
||||
return ___encodeAsArray(i)
|
||||
} else {
|
||||
return ___encodeAsMap(i)
|
||||
}
|
||||
}
|
||||
|
||||
// encodeAsArray
|
||||
func ___encodeAsArray(i interface{}) ([]byte, error) {
|
||||
switch v := i.(type) {
|
||||
case message.HeartBeat:
|
||||
encoder := enc.NewEncoder()
|
||||
size, err := ___calcArraySizeHeartBeat_27424f445a2085e7723342fb0df638c626b43c59240988bc64f2d60167ee4080(v, encoder)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
encoder.MakeBytes(size)
|
||||
b, offset, err := ___encodeArrayHeartBeat_27424f445a2085e7723342fb0df638c626b43c59240988bc64f2d60167ee4080(v, encoder, 0)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
if size != offset {
|
||||
return nil, fmt.Errorf("%s size / offset different %d : %d", "github.com/eosswedenorg/thalos/api/message.HeartBeat", size, offset)
|
||||
}
|
||||
return b, err
|
||||
case *message.HeartBeat:
|
||||
encoder := enc.NewEncoder()
|
||||
size, err := ___calcArraySizeHeartBeat_27424f445a2085e7723342fb0df638c626b43c59240988bc64f2d60167ee4080(*v, encoder)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
encoder.MakeBytes(size)
|
||||
b, offset, err := ___encodeArrayHeartBeat_27424f445a2085e7723342fb0df638c626b43c59240988bc64f2d60167ee4080(*v, encoder, 0)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
if size != offset {
|
||||
return nil, fmt.Errorf("%s size / offset different %d : %d", "github.com/eosswedenorg/thalos/api/message.HeartBeat", size, offset)
|
||||
}
|
||||
return b, err
|
||||
}
|
||||
return nil, nil
|
||||
}
|
||||
|
||||
// encodeAsMap
|
||||
func ___encodeAsMap(i interface{}) ([]byte, error) {
|
||||
switch v := i.(type) {
|
||||
case message.HeartBeat:
|
||||
encoder := enc.NewEncoder()
|
||||
size, err := ___calcMapSizeHeartBeat_27424f445a2085e7723342fb0df638c626b43c59240988bc64f2d60167ee4080(v, encoder)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
encoder.MakeBytes(size)
|
||||
b, offset, err := ___encodeMapHeartBeat_27424f445a2085e7723342fb0df638c626b43c59240988bc64f2d60167ee4080(v, encoder, 0)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
if size != offset {
|
||||
return nil, fmt.Errorf("%s size / offset different %d : %d", "github.com/eosswedenorg/thalos/api/message.HeartBeat", size, offset)
|
||||
}
|
||||
return b, err
|
||||
case *message.HeartBeat:
|
||||
encoder := enc.NewEncoder()
|
||||
size, err := ___calcMapSizeHeartBeat_27424f445a2085e7723342fb0df638c626b43c59240988bc64f2d60167ee4080(*v, encoder)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
encoder.MakeBytes(size)
|
||||
b, offset, err := ___encodeMapHeartBeat_27424f445a2085e7723342fb0df638c626b43c59240988bc64f2d60167ee4080(*v, encoder, 0)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
if size != offset {
|
||||
return nil, fmt.Errorf("%s size / offset different %d : %d", "github.com/eosswedenorg/thalos/api/message.HeartBeat", size, offset)
|
||||
}
|
||||
return b, err
|
||||
}
|
||||
return nil, nil
|
||||
}
|
||||
|
||||
// decode
|
||||
func ___decode(data []byte, i interface{}) (bool, error) {
|
||||
if msgpack.StructAsArray() {
|
||||
return ___decodeAsArray(data, i)
|
||||
} else {
|
||||
return ___decodeAsMap(data, i)
|
||||
}
|
||||
}
|
||||
|
||||
// decodeAsArray
|
||||
func ___decodeAsArray(data []byte, i interface{}) (bool, error) {
|
||||
switch v := i.(type) {
|
||||
case *message.HeartBeat:
|
||||
decoder := dec.NewDecoder(data)
|
||||
offset, err := ___decodeArrayHeartBeat_27424f445a2085e7723342fb0df638c626b43c59240988bc64f2d60167ee4080(v, decoder, 0)
|
||||
if err == nil && offset != decoder.Len() {
|
||||
return true, fmt.Errorf("read length is different [%d] [%d] ", offset, decoder.Len())
|
||||
}
|
||||
return true, err
|
||||
case **message.HeartBeat:
|
||||
decoder := dec.NewDecoder(data)
|
||||
offset, err := ___decodeArrayHeartBeat_27424f445a2085e7723342fb0df638c626b43c59240988bc64f2d60167ee4080(*v, decoder, 0)
|
||||
if err == nil && offset != decoder.Len() {
|
||||
return true, fmt.Errorf("read length is different [%d] [%d] ", offset, decoder.Len())
|
||||
}
|
||||
return true, err
|
||||
}
|
||||
return false, nil
|
||||
}
|
||||
|
||||
// decodeAsMap
|
||||
func ___decodeAsMap(data []byte, i interface{}) (bool, error) {
|
||||
switch v := i.(type) {
|
||||
case *message.HeartBeat:
|
||||
decoder := dec.NewDecoder(data)
|
||||
offset, err := ___decodeMapHeartBeat_27424f445a2085e7723342fb0df638c626b43c59240988bc64f2d60167ee4080(v, decoder, 0)
|
||||
if err == nil && offset != decoder.Len() {
|
||||
return true, fmt.Errorf("read length is different [%d] [%d] ", offset, decoder.Len())
|
||||
}
|
||||
return true, err
|
||||
case **message.HeartBeat:
|
||||
decoder := dec.NewDecoder(data)
|
||||
offset, err := ___decodeMapHeartBeat_27424f445a2085e7723342fb0df638c626b43c59240988bc64f2d60167ee4080(*v, decoder, 0)
|
||||
if err == nil && offset != decoder.Len() {
|
||||
return true, fmt.Errorf("read length is different [%d] [%d] ", offset, decoder.Len())
|
||||
}
|
||||
return true, err
|
||||
}
|
||||
return false, nil
|
||||
}
|
||||
|
||||
// calculate size from github.com/eosswedenorg/thalos/api/message.HeartBeat
|
||||
func ___calcArraySizeHeartBeat_27424f445a2085e7723342fb0df638c626b43c59240988bc64f2d60167ee4080(v message.HeartBeat, encoder *enc.Encoder) (int, error) {
|
||||
size := 0
|
||||
size += encoder.CalcStructHeaderFix(3)
|
||||
size += encoder.CalcUint32(v.BlockNum)
|
||||
size += encoder.CalcUint32(v.HeadBlockNum)
|
||||
size += encoder.CalcUint32(v.LastIrreversibleBlockNum)
|
||||
return size, nil
|
||||
}
|
||||
|
||||
// calculate size from github.com/eosswedenorg/thalos/api/message.HeartBeat
|
||||
func ___calcMapSizeHeartBeat_27424f445a2085e7723342fb0df638c626b43c59240988bc64f2d60167ee4080(v message.HeartBeat, encoder *enc.Encoder) (int, error) {
|
||||
size := 0
|
||||
size += encoder.CalcStructHeaderFix(3)
|
||||
size += encoder.CalcStringFix(8)
|
||||
size += encoder.CalcUint32(v.BlockNum)
|
||||
size += encoder.CalcStringFix(12)
|
||||
size += encoder.CalcUint32(v.HeadBlockNum)
|
||||
size += encoder.CalcStringFix(24)
|
||||
size += encoder.CalcUint32(v.LastIrreversibleBlockNum)
|
||||
return size, nil
|
||||
}
|
||||
|
||||
// encode from github.com/eosswedenorg/thalos/api/message.HeartBeat
|
||||
func ___encodeArrayHeartBeat_27424f445a2085e7723342fb0df638c626b43c59240988bc64f2d60167ee4080(v message.HeartBeat, encoder *enc.Encoder, offset int) ([]byte, int, error) {
|
||||
var err error
|
||||
offset = encoder.WriteStructHeaderFixAsArray(3, offset)
|
||||
offset = encoder.WriteUint32(v.BlockNum, offset)
|
||||
offset = encoder.WriteUint32(v.HeadBlockNum, offset)
|
||||
offset = encoder.WriteUint32(v.LastIrreversibleBlockNum, offset)
|
||||
return encoder.EncodedBytes(), offset, err
|
||||
}
|
||||
|
||||
// encode from github.com/eosswedenorg/thalos/api/message.HeartBeat
|
||||
func ___encodeMapHeartBeat_27424f445a2085e7723342fb0df638c626b43c59240988bc64f2d60167ee4080(v message.HeartBeat, encoder *enc.Encoder, offset int) ([]byte, int, error) {
|
||||
var err error
|
||||
offset = encoder.WriteStructHeaderFixAsMap(3, offset)
|
||||
offset = encoder.WriteStringFix("BlockNum", 8, offset)
|
||||
offset = encoder.WriteUint32(v.BlockNum, offset)
|
||||
offset = encoder.WriteStringFix("HeadBlockNum", 12, offset)
|
||||
offset = encoder.WriteUint32(v.HeadBlockNum, offset)
|
||||
offset = encoder.WriteStringFix("LastIrreversibleBlockNum", 24, offset)
|
||||
offset = encoder.WriteUint32(v.LastIrreversibleBlockNum, offset)
|
||||
return encoder.EncodedBytes(), offset, err
|
||||
}
|
||||
|
||||
// decode to github.com/eosswedenorg/thalos/api/message.HeartBeat
|
||||
func ___decodeArrayHeartBeat_27424f445a2085e7723342fb0df638c626b43c59240988bc64f2d60167ee4080(v *message.HeartBeat, decoder *dec.Decoder, offset int) (int, error) {
|
||||
offset, err := decoder.CheckStructHeader(3, offset)
|
||||
if err != nil {
|
||||
return 0, err
|
||||
}
|
||||
{
|
||||
var vv uint32
|
||||
vv, offset, err = decoder.AsUint32(offset)
|
||||
if err != nil {
|
||||
return 0, err
|
||||
}
|
||||
v.BlockNum = vv
|
||||
}
|
||||
{
|
||||
var vv uint32
|
||||
vv, offset, err = decoder.AsUint32(offset)
|
||||
if err != nil {
|
||||
return 0, err
|
||||
}
|
||||
v.HeadBlockNum = vv
|
||||
}
|
||||
{
|
||||
var vv uint32
|
||||
vv, offset, err = decoder.AsUint32(offset)
|
||||
if err != nil {
|
||||
return 0, err
|
||||
}
|
||||
v.LastIrreversibleBlockNum = vv
|
||||
}
|
||||
return offset, err
|
||||
}
|
||||
|
||||
// decode to github.com/eosswedenorg/thalos/api/message.HeartBeat
|
||||
func ___decodeMapHeartBeat_27424f445a2085e7723342fb0df638c626b43c59240988bc64f2d60167ee4080(v *message.HeartBeat, decoder *dec.Decoder, offset int) (int, error) {
|
||||
keys := [][]byte{
|
||||
{uint8(0x42), uint8(0x6c), uint8(0x6f), uint8(0x63), uint8(0x6b), uint8(0x4e), uint8(0x75), uint8(0x6d)}, // BlockNum
|
||||
{uint8(0x48), uint8(0x65), uint8(0x61), uint8(0x64), uint8(0x42), uint8(0x6c), uint8(0x6f), uint8(0x63), uint8(0x6b), uint8(0x4e), uint8(0x75), uint8(0x6d)}, // HeadBlockNum
|
||||
{uint8(0x4c), uint8(0x61), uint8(0x73), uint8(0x74), uint8(0x49), uint8(0x72), uint8(0x72), uint8(0x65), uint8(0x76), uint8(0x65), uint8(0x72), uint8(0x73), uint8(0x69), uint8(0x62), uint8(0x6c), uint8(0x65), uint8(0x42), uint8(0x6c), uint8(0x6f), uint8(0x63), uint8(0x6b), uint8(0x4e), uint8(0x75), uint8(0x6d)}, // LastIrreversibleBlockNum
|
||||
}
|
||||
offset, err := decoder.CheckStructHeader(3, offset)
|
||||
if err != nil {
|
||||
return 0, err
|
||||
}
|
||||
count := 0
|
||||
for count < 3 {
|
||||
var dataKey []byte
|
||||
dataKey, offset, err = decoder.AsStringBytes(offset)
|
||||
if err != nil {
|
||||
return 0, err
|
||||
}
|
||||
fieldIndex := -1
|
||||
for i, key := range keys {
|
||||
if len(dataKey) != len(key) {
|
||||
continue
|
||||
}
|
||||
fieldIndex = i
|
||||
for dataKeyIndex := range dataKey {
|
||||
if dataKey[dataKeyIndex] != key[dataKeyIndex] {
|
||||
fieldIndex = -1
|
||||
break
|
||||
}
|
||||
}
|
||||
if fieldIndex >= 0 {
|
||||
break
|
||||
}
|
||||
}
|
||||
switch fieldIndex {
|
||||
case 0:
|
||||
{
|
||||
var vv uint32
|
||||
vv, offset, err = decoder.AsUint32(offset)
|
||||
if err != nil {
|
||||
return 0, err
|
||||
}
|
||||
v.BlockNum = vv
|
||||
}
|
||||
count++
|
||||
case 1:
|
||||
{
|
||||
var vv uint32
|
||||
vv, offset, err = decoder.AsUint32(offset)
|
||||
if err != nil {
|
||||
return 0, err
|
||||
}
|
||||
v.HeadBlockNum = vv
|
||||
}
|
||||
count++
|
||||
case 2:
|
||||
{
|
||||
var vv uint32
|
||||
vv, offset, err = decoder.AsUint32(offset)
|
||||
if err != nil {
|
||||
return 0, err
|
||||
}
|
||||
v.LastIrreversibleBlockNum = vv
|
||||
}
|
||||
count++
|
||||
default:
|
||||
return 0, fmt.Errorf("unknown key[%s] found", string(dataKey))
|
||||
}
|
||||
}
|
||||
return offset, err
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue