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-contrib/sse"
"github.com/gin-gonic/gin/binding" "github.com/gin-gonic/gin/binding"
"github.com/gin-gonic/gin/render" "github.com/gin-gonic/gin/render"
"github.com/golang/protobuf/proto"
) )
// Content-Type MIME of the most common data formats. // 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}) 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. // String writes the given string into the response body.
func (c *Context) String(code int, format string, values ...interface{}) { func (c *Context) String(code int, format string, values ...interface{}) {
c.Render(code, render.String{Format: format, Data: values}) 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 *******/ /******** CONTENT NEGOTIATION *******/
/************************************/ /************************************/

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

View File

@ -11,7 +11,7 @@ import (
) )
type ProtoBuf struct { type ProtoBuf struct {
Data proto.Message Data interface{}
} }
var protobufContentType = []string{"application/x-protobuf"} var protobufContentType = []string{"application/x-protobuf"}
@ -19,7 +19,7 @@ var protobufContentType = []string{"application/x-protobuf"}
func (r ProtoBuf) Render(w http.ResponseWriter) error { func (r ProtoBuf) Render(w http.ResponseWriter) error {
r.WriteContentType(w) r.WriteContentType(w)
bytes, err := proto.Marshal(r.Data) bytes, err := proto.Marshal(r.Data.(proto.Message))
if err != nil { if err != nil {
return err 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" "strings"
"testing" "testing"
testdata "github.com/gin-gonic/gin/testdata/protoexample"
"github.com/golang/protobuf/proto" "github.com/golang/protobuf/proto"
"github.com/stretchr/testify/assert" "github.com/stretchr/testify/assert"
"github.com/ugorji/go/codec" "github.com/ugorji/go/codec"
testdata "github.com/gin-gonic/gin/testdata/protoexample"
) )
// TODO unit tests // TODO unit tests