aboutsummaryrefslogtreecommitdiff
path: root/vendor/google.golang.org/grpc/codec.go
diff options
context:
space:
mode:
authorGravatar Yong Tang <yong.tang.github@outlook.com> 2018-01-15 09:59:29 -0800
committerGravatar GitHub <noreply@github.com> 2018-01-15 09:59:29 -0800
commit584dd87c70e29abc373f88be52bd2eee287ecace (patch)
tree6b4ac5286a5345c796071e4e9f7a9e6fce47a5ca /vendor/google.golang.org/grpc/codec.go
parentd699b89063843d81cee35f128aaef9881439151f (diff)
downloadcoredns-584dd87c70e29abc373f88be52bd2eee287ecace.tar.gz
coredns-584dd87c70e29abc373f88be52bd2eee287ecace.tar.zst
coredns-584dd87c70e29abc373f88be52bd2eee287ecace.zip
Add route53 plugin (#1390)
* Update vendor Signed-off-by: Yong Tang <yong.tang.github@outlook.com> * Add route53 plugin This fix adds route53 plugin so that it is possible to query route53 record through CoreDNS. Signed-off-by: Yong Tang <yong.tang.github@outlook.com>
Diffstat (limited to 'vendor/google.golang.org/grpc/codec.go')
-rw-r--r--vendor/google.golang.org/grpc/codec.go16
1 files changed, 14 insertions, 2 deletions
diff --git a/vendor/google.golang.org/grpc/codec.go b/vendor/google.golang.org/grpc/codec.go
index b452a4ae8..43d81ed2a 100644
--- a/vendor/google.golang.org/grpc/codec.go
+++ b/vendor/google.golang.org/grpc/codec.go
@@ -69,6 +69,11 @@ func (p protoCodec) marshal(v interface{}, cb *cachedProtoBuffer) ([]byte, error
}
func (p protoCodec) Marshal(v interface{}) ([]byte, error) {
+ if pm, ok := v.(proto.Marshaler); ok {
+ // object can marshal itself, no need for buffer
+ return pm.Marshal()
+ }
+
cb := protoBufferPool.Get().(*cachedProtoBuffer)
out, err := p.marshal(v, cb)
@@ -79,10 +84,17 @@ func (p protoCodec) Marshal(v interface{}) ([]byte, error) {
}
func (p protoCodec) Unmarshal(data []byte, v interface{}) error {
+ protoMsg := v.(proto.Message)
+ protoMsg.Reset()
+
+ if pu, ok := protoMsg.(proto.Unmarshaler); ok {
+ // object can unmarshal itself, no need for buffer
+ return pu.Unmarshal(data)
+ }
+
cb := protoBufferPool.Get().(*cachedProtoBuffer)
cb.SetBuf(data)
- v.(proto.Message).Reset()
- err := cb.Unmarshal(v.(proto.Message))
+ err := cb.Unmarshal(protoMsg)
cb.SetBuf(nil)
protoBufferPool.Put(cb)
return err