codec.go (1689B)
1 /* 2 * 3 * Copyright 2014 gRPC authors. 4 * 5 * Licensed under the Apache License, Version 2.0 (the "License"); 6 * you may not use this file except in compliance with the License. 7 * You may obtain a copy of the License at 8 * 9 * http://www.apache.org/licenses/LICENSE-2.0 10 * 11 * Unless required by applicable law or agreed to in writing, software 12 * distributed under the License is distributed on an "AS IS" BASIS, 13 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 * See the License for the specific language governing permissions and 15 * limitations under the License. 16 * 17 */ 18 19 package grpc 20 21 import ( 22 "google.golang.org/grpc/encoding" 23 _ "google.golang.org/grpc/encoding/proto" // to register the Codec for "proto" 24 ) 25 26 // baseCodec contains the functionality of both Codec and encoding.Codec, but 27 // omits the name/string, which vary between the two and are not needed for 28 // anything besides the registry in the encoding package. 29 type baseCodec interface { 30 Marshal(v interface{}) ([]byte, error) 31 Unmarshal(data []byte, v interface{}) error 32 } 33 34 var _ baseCodec = Codec(nil) 35 var _ baseCodec = encoding.Codec(nil) 36 37 // Codec defines the interface gRPC uses to encode and decode messages. 38 // Note that implementations of this interface must be thread safe; 39 // a Codec's methods can be called from concurrent goroutines. 40 // 41 // Deprecated: use encoding.Codec instead. 42 type Codec interface { 43 // Marshal returns the wire format of v. 44 Marshal(v interface{}) ([]byte, error) 45 // Unmarshal parses the wire format into v. 46 Unmarshal(data []byte, v interface{}) error 47 // String returns the name of the Codec implementation. This is unused by 48 // gRPC. 49 String() string 50 }