xref: /aosp_15_r20/external/flatbuffers/go/grpc.go (revision 890232f25432b36107d06881e0a25aaa6b473652)
1*890232f2SAndroid Build Coastguard Workerpackage flatbuffers
2*890232f2SAndroid Build Coastguard Worker
3*890232f2SAndroid Build Coastguard Worker// Codec implements gRPC-go Codec which is used to encode and decode messages.
4*890232f2SAndroid Build Coastguard Workervar Codec = "flatbuffers"
5*890232f2SAndroid Build Coastguard Worker
6*890232f2SAndroid Build Coastguard Worker// FlatbuffersCodec defines the interface gRPC uses to encode and decode messages.  Note
7*890232f2SAndroid Build Coastguard Worker// that implementations of this interface must be thread safe; a Codec's
8*890232f2SAndroid Build Coastguard Worker// methods can be called from concurrent goroutines.
9*890232f2SAndroid Build Coastguard Workertype FlatbuffersCodec struct{}
10*890232f2SAndroid Build Coastguard Worker
11*890232f2SAndroid Build Coastguard Worker// Marshal returns the wire format of v.
12*890232f2SAndroid Build Coastguard Workerfunc (FlatbuffersCodec) Marshal(v interface{}) ([]byte, error) {
13*890232f2SAndroid Build Coastguard Worker	return v.(*Builder).FinishedBytes(), nil
14*890232f2SAndroid Build Coastguard Worker}
15*890232f2SAndroid Build Coastguard Worker
16*890232f2SAndroid Build Coastguard Worker// Unmarshal parses the wire format into v.
17*890232f2SAndroid Build Coastguard Workerfunc (FlatbuffersCodec) Unmarshal(data []byte, v interface{}) error {
18*890232f2SAndroid Build Coastguard Worker	v.(flatbuffersInit).Init(data, GetUOffsetT(data))
19*890232f2SAndroid Build Coastguard Worker	return nil
20*890232f2SAndroid Build Coastguard Worker}
21*890232f2SAndroid Build Coastguard Worker
22*890232f2SAndroid Build Coastguard Worker// String  old gRPC Codec interface func
23*890232f2SAndroid Build Coastguard Workerfunc (FlatbuffersCodec) String() string {
24*890232f2SAndroid Build Coastguard Worker	return Codec
25*890232f2SAndroid Build Coastguard Worker}
26*890232f2SAndroid Build Coastguard Worker
27*890232f2SAndroid Build Coastguard Worker// Name returns the name of the Codec implementation. The returned string
28*890232f2SAndroid Build Coastguard Worker// will be used as part of content type in transmission.  The result must be
29*890232f2SAndroid Build Coastguard Worker// static; the result cannot change between calls.
30*890232f2SAndroid Build Coastguard Worker//
31*890232f2SAndroid Build Coastguard Worker// add Name() for ForceCodec interface
32*890232f2SAndroid Build Coastguard Workerfunc (FlatbuffersCodec) Name() string {
33*890232f2SAndroid Build Coastguard Worker	return Codec
34*890232f2SAndroid Build Coastguard Worker}
35*890232f2SAndroid Build Coastguard Worker
36*890232f2SAndroid Build Coastguard Workertype flatbuffersInit interface {
37*890232f2SAndroid Build Coastguard Worker	Init(data []byte, i UOffsetT)
38*890232f2SAndroid Build Coastguard Worker}
39