not use protobuf on context but use it on render (#1496)

This commit is contained in:
田欧 2018-08-19 17:39:58 +08:00 committed by GitHub
parent efdd3c8b81
commit 6073a79ee0
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
5 changed files with 9 additions and 9 deletions

View File

@ -20,7 +20,6 @@ import (
"github.com/gin-contrib/sse"
"github.com/gin-gonic/gin/binding"
"github.com/gin-gonic/gin/render"
"github.com/golang/protobuf/proto"
)
// Content-Type MIME of the most common data formats.
@ -784,6 +783,11 @@ func (c *Context) YAML(code int, obj interface{}) {
c.Render(code, render.YAML{Data: obj})
}
// ProtoBuf serializes the given struct as ProtoBuf into the response body.
func (c *Context) ProtoBuf(code int, obj interface{}) {
c.Render(code, render.ProtoBuf{Data: obj})
}
// String writes the given string into the response body.
func (c *Context) String(code int, format string, values ...interface{}) {
c.Render(code, render.String{Format: format, Data: values})
@ -846,11 +850,6 @@ func (c *Context) Stream(step func(w io.Writer) bool) {
}
}
// ProtoBuf serializes the given struct as ProtoBuf into the response body.
func (c *Context) ProtoBuf(code int, obj proto.Message) {
c.Render(code, render.ProtoBuf{Data: obj})
}
/************************************/
/******** CONTENT NEGOTIATION *******/
/************************************/

0
render/json.go Executable file → Normal file
View File

View File

@ -11,7 +11,7 @@ import (
)
type ProtoBuf struct {
Data proto.Message
Data interface{}
}
var protobufContentType = []string{"application/x-protobuf"}
@ -19,7 +19,7 @@ var protobufContentType = []string{"application/x-protobuf"}
func (r ProtoBuf) Render(w http.ResponseWriter) error {
r.WriteContentType(w)
bytes, err := proto.Marshal(r.Data)
bytes, err := proto.Marshal(r.Data.(proto.Message))
if err != nil {
return err
}

0
render/render.go Executable file → Normal file
View File

3
render/render_test.go Executable file → Normal file
View File

@ -15,10 +15,11 @@ import (
"strings"
"testing"
testdata "github.com/gin-gonic/gin/testdata/protoexample"
"github.com/golang/protobuf/proto"
"github.com/stretchr/testify/assert"
"github.com/ugorji/go/codec"
testdata "github.com/gin-gonic/gin/testdata/protoexample"
)
// TODO unit tests