protobuf.go (852B)
1 // Copyright 2018 Gin Core Team. All rights reserved. 2 // Use of this source code is governed by a MIT style 3 // license that can be found in the LICENSE file. 4 5 package render 6 7 import ( 8 "net/http" 9 10 "google.golang.org/protobuf/proto" 11 ) 12 13 // ProtoBuf contains the given interface object. 14 type ProtoBuf struct { 15 Data any 16 } 17 18 var protobufContentType = []string{"application/x-protobuf"} 19 20 // Render (ProtoBuf) marshals the given interface object and writes data with custom ContentType. 21 func (r ProtoBuf) Render(w http.ResponseWriter) error { 22 r.WriteContentType(w) 23 24 bytes, err := proto.Marshal(r.Data.(proto.Message)) 25 if err != nil { 26 return err 27 } 28 29 _, err = w.Write(bytes) 30 return err 31 } 32 33 // WriteContentType (ProtoBuf) writes ProtoBuf ContentType. 34 func (r ProtoBuf) WriteContentType(w http.ResponseWriter) { 35 writeContentType(w, protobufContentType) 36 }