/* * * Copyright 2014 gRPC authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. * */ package grpc import ( "google.golang.org/grpc/encoding" _ "google.golang.org/grpc/encoding/proto" // to register the Codec for "proto" ) // baseCodec contains the functionality of both Codec and encoding.Codec, but // omits the name/string, which vary between the two and are not needed for // anything besides the registry in the encoding package. type baseCodec interface { Marshal(v interface{}) ([]byte, error) Unmarshal(data []byte, v interface{}) error } // A bufferReturner requires a ReturnBuffer method to be implemented. Once a // Marshal caller is done with the returned byte buffer, they can choose to // return it back to the encoding library for re-use using this method. type bufferReturner interface { // If implemented in a codec, this function may be called with the byte // buffer returned by Marshal after gRPC is done with the buffer. // // gRPC will not call ReturnBuffer after it's done with the buffer if any of // the following is true: // 1. Stats handlers are used. // 2. Binlogs are enabled. ReturnBuffer(buf []byte) } var _ baseCodec = Codec(nil) var _ baseCodec = encoding.Codec(nil) // Codec defines the interface gRPC uses to encode and decode messages. // Note that implementations of this interface must be thread safe; // a Codec's methods can be called from concurrent goroutines. // // Deprecated: use encoding.Codec instead. type Codec interface { // Marshal returns the wire format of v. Marshal(v interface{}) ([]byte, error) // Unmarshal parses the wire format into v. Unmarshal(data []byte, v interface{}) error // String returns the name of the Codec implementation. This is unused by // gRPC. String() string }