Add support for Protobuf format response and unit test (#1479)
`Gin` now have the `protobufBinding` function to check the request format, but didn't have a protobuf response function like `c.YAML()`. In our company [ByteDance](http://bytedance.com/), the largest internet company using golang in China, we use `gin` to transfer __Protobuf__ instead of __Json__, we have to write some internal library to make some wrappers to achieve that, and the code is not elegant. So we really want such a feature.
This commit is contained in:
		
							
								
								
									
										33
									
								
								render/protobuf.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										33
									
								
								render/protobuf.go
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,33 @@
 | 
			
		||||
// Copyright 2018 Gin Core Team.  All rights reserved.
 | 
			
		||||
// Use of this source code is governed by a MIT style
 | 
			
		||||
// license that can be found in the LICENSE file.
 | 
			
		||||
 | 
			
		||||
package render
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"net/http"
 | 
			
		||||
 | 
			
		||||
	"github.com/golang/protobuf/proto"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
type ProtoBuf struct {
 | 
			
		||||
	Data proto.Message
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
var protobufContentType = []string{"application/x-protobuf"}
 | 
			
		||||
 | 
			
		||||
func (r ProtoBuf) Render(w http.ResponseWriter) error {
 | 
			
		||||
	r.WriteContentType(w)
 | 
			
		||||
 | 
			
		||||
	bytes, err := proto.Marshal(r.Data)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return err
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	w.Write(bytes)
 | 
			
		||||
	return nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (r ProtoBuf) WriteContentType(w http.ResponseWriter) {
 | 
			
		||||
	writeContentType(w, protobufContentType)
 | 
			
		||||
}
 | 
			
		||||
		Reference in New Issue
	
	Block a user