]> git.immae.eu Git - github/fretlink/terraform-provider-statuscake.git/blobdiff - vendor/google.golang.org/grpc/codec.go
Upgrade to 0.12
[github/fretlink/terraform-provider-statuscake.git] / vendor / google.golang.org / grpc / codec.go
index 905b048e2ac585b04e7c118b7e0d1ee93197a5e4..129776547811b600b00b41d4eaa2d345aa8dfbd4 100644 (file)
 package grpc
 
 import (
-       "math"
-       "sync"
-
-       "github.com/golang/protobuf/proto"
+       "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
+}
+
+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. The returned
-       // string will be used as part of content type in transmission.
+       // String returns the name of the Codec implementation.  This is unused by
+       // gRPC.
        String() string
 }
-
-// protoCodec is a Codec implementation with protobuf. It is the default codec for gRPC.
-type protoCodec struct {
-}
-
-type cachedProtoBuffer struct {
-       lastMarshaledSize uint32
-       proto.Buffer
-}
-
-func capToMaxInt32(val int) uint32 {
-       if val > math.MaxInt32 {
-               return uint32(math.MaxInt32)
-       }
-       return uint32(val)
-}
-
-func (p protoCodec) marshal(v interface{}, cb *cachedProtoBuffer) ([]byte, error) {
-       protoMsg := v.(proto.Message)
-       newSlice := make([]byte, 0, cb.lastMarshaledSize)
-
-       cb.SetBuf(newSlice)
-       cb.Reset()
-       if err := cb.Marshal(protoMsg); err != nil {
-               return nil, err
-       }
-       out := cb.Bytes()
-       cb.lastMarshaledSize = capToMaxInt32(len(out))
-       return out, nil
-}
-
-func (p protoCodec) Marshal(v interface{}) ([]byte, error) {
-       cb := protoBufferPool.Get().(*cachedProtoBuffer)
-       out, err := p.marshal(v, cb)
-
-       // put back buffer and lose the ref to the slice
-       cb.SetBuf(nil)
-       protoBufferPool.Put(cb)
-       return out, err
-}
-
-func (p protoCodec) Unmarshal(data []byte, v interface{}) error {
-       cb := protoBufferPool.Get().(*cachedProtoBuffer)
-       cb.SetBuf(data)
-       v.(proto.Message).Reset()
-       err := cb.Unmarshal(v.(proto.Message))
-       cb.SetBuf(nil)
-       protoBufferPool.Put(cb)
-       return err
-}
-
-func (protoCodec) String() string {
-       return "proto"
-}
-
-var (
-       protoBufferPool = &sync.Pool{
-               New: func() interface{} {
-                       return &cachedProtoBuffer{
-                               Buffer:            proto.Buffer{},
-                               lastMarshaledSize: 16,
-                       }
-               },
-       }
-)