github.com/osdi23p228/fabric@v0.0.0-20221218062954-77808885f5db/core/ledger/kvledger/txmgmt/statedb/statecouchdb/dbvalue_encoding.go (about) 1 /* 2 Copyright IBM Corp. All Rights Reserved. 3 4 SPDX-License-Identifier: Apache-2.0 5 */ 6 7 package statecouchdb 8 9 import ( 10 "encoding/base64" 11 12 "github.com/golang/protobuf/proto" 13 "github.com/osdi23p228/fabric/core/ledger/internal/version" 14 "github.com/pkg/errors" 15 ) 16 17 func encodeVersionAndMetadata(version *version.Height, metadata []byte) (string, error) { 18 if version == nil { 19 return "", errors.New("nil version not supported") 20 } 21 msg := &VersionAndMetadata{ 22 Version: version.ToBytes(), 23 Metadata: metadata, 24 } 25 msgBytes, err := proto.Marshal(msg) 26 if err != nil { 27 return "", err 28 } 29 return base64.StdEncoding.EncodeToString(msgBytes), nil 30 } 31 32 func decodeVersionAndMetadata(encodedstr string) (*version.Height, []byte, error) { 33 persistedVersionAndMetadata, err := base64.StdEncoding.DecodeString(encodedstr) 34 if err != nil { 35 return nil, nil, err 36 } 37 versionAndMetadata := &VersionAndMetadata{} 38 if err = proto.Unmarshal(persistedVersionAndMetadata, versionAndMetadata); err != nil { 39 return nil, nil, err 40 } 41 ver, _, err := version.NewHeightFromBytes(versionAndMetadata.Version) 42 if err != nil { 43 return nil, nil, err 44 } 45 return ver, versionAndMetadata.Metadata, nil 46 } 47 48 func encodeValueVersionMetadata(value, versionAndMetadata []byte) ([]byte, error) { 49 val := &ValueVersionMetadata{ 50 Value: value, 51 VersionAndMetadata: versionAndMetadata, 52 } 53 return proto.Marshal(val) 54 } 55 56 func decodeValueVersionMetadata(encodedMsg []byte) (*ValueVersionMetadata, error) { 57 val := &ValueVersionMetadata{} 58 if err := proto.Unmarshal(encodedMsg, val); err != nil { 59 return nil, err 60 } 61 return val, nil 62 }