trpc.group/trpc-go/trpc-go@v1.0.3/codec/serialization_fb.go (about) 1 // 2 // 3 // Tencent is pleased to support the open source community by making tRPC available. 4 // 5 // Copyright (C) 2023 THL A29 Limited, a Tencent company. 6 // All rights reserved. 7 // 8 // If you have downloaded a copy of the tRPC source code from Tencent, 9 // please note that tRPC source code is licensed under the Apache 2.0 License, 10 // A copy of the Apache 2.0 License is included in this file. 11 // 12 // 13 14 package codec 15 16 import ( 17 "errors" 18 19 flatbuffers "github.com/google/flatbuffers/go" 20 ) 21 22 func init() { 23 RegisterSerializer(SerializationTypeFlatBuffer, &FBSerialization{}) 24 } 25 26 // FBSerialization provides the flatbuffers serialization mode. 27 // Flatbuffers official url: https://google.github.io/flatbuffers 28 type FBSerialization struct{} 29 30 // Unmarshal deserializes the in bytes into body param, body 31 // should implement flatbuffersInit interface. 32 func (*FBSerialization) Unmarshal(in []byte, body interface{}) error { 33 body, ok := body.(flatbuffersInit) 34 if !ok { 35 return errors.New("unmarshal fail: body does not implement flatbufferInit interface") 36 } 37 body.(flatbuffersInit).Init(in, flatbuffers.GetUOffsetT(in)) 38 return nil 39 } 40 41 // Marshal returns the serialized bytes, body should be a flatbuffers.Builder. 42 func (*FBSerialization) Marshal(body interface{}) ([]byte, error) { 43 builder, ok := body.(*flatbuffers.Builder) 44 if !ok { 45 return nil, errors.New("marshal fail: body not *flatbuffers.Builder") 46 } 47 return builder.FinishedBytes(), nil 48 } 49 50 type flatbuffersInit interface { 51 Init(data []byte, i flatbuffers.UOffsetT) 52 }