github.com/renegr87/renegr87@v2.1.1+incompatible/core/ledger/kvledger/txmgmt/statedb/stateleveldb/value_encoding.go (about) 1 /* 2 Copyright IBM Corp. All Rights Reserved. 3 4 SPDX-License-Identifier: Apache-2.0 5 */ 6 7 package stateleveldb 8 9 import ( 10 proto "github.com/golang/protobuf/proto" 11 "github.com/hyperledger/fabric/core/ledger/kvledger/txmgmt/statedb" 12 "github.com/hyperledger/fabric/core/ledger/kvledger/txmgmt/statedb/stateleveldb/msgs" 13 "github.com/hyperledger/fabric/core/ledger/kvledger/txmgmt/version" 14 ) 15 16 // encodeValue encodes the value, version, and metadata 17 func encodeValue(v *statedb.VersionedValue) ([]byte, error) { 18 return proto.Marshal( 19 &msgs.VersionedValueProto{ 20 VersionBytes: v.Version.ToBytes(), 21 Value: v.Value, 22 Metadata: v.Metadata, 23 }, 24 ) 25 } 26 27 // decodeValue decodes the statedb value bytes 28 func decodeValue(encodedValue []byte) (*statedb.VersionedValue, error) { 29 msg := &msgs.VersionedValueProto{} 30 err := proto.Unmarshal(encodedValue, msg) 31 if err != nil { 32 return nil, err 33 } 34 ver, _, err := version.NewHeightFromBytes(msg.VersionBytes) 35 if err != nil { 36 return nil, err 37 } 38 val := msg.Value 39 metadata := msg.Metadata 40 // protobuf always makes an empty byte array as nil 41 if val == nil { 42 val = []byte{} 43 } 44 return &statedb.VersionedValue{Version: ver, Value: val, Metadata: metadata}, nil 45 }