gtsocial-umbx

Unnamed repository; edit this file 'description' to name the repository.
Log | Files | Refs | README | LICENSE

reader.go (1208B)


      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 	"io"
      9 	"net/http"
     10 	"strconv"
     11 )
     12 
     13 // Reader contains the IO reader and its length, and custom ContentType and other headers.
     14 type Reader struct {
     15 	ContentType   string
     16 	ContentLength int64
     17 	Reader        io.Reader
     18 	Headers       map[string]string
     19 }
     20 
     21 // Render (Reader) writes data with custom ContentType and headers.
     22 func (r Reader) Render(w http.ResponseWriter) (err error) {
     23 	r.WriteContentType(w)
     24 	if r.ContentLength >= 0 {
     25 		if r.Headers == nil {
     26 			r.Headers = map[string]string{}
     27 		}
     28 		r.Headers["Content-Length"] = strconv.FormatInt(r.ContentLength, 10)
     29 	}
     30 	r.writeHeaders(w, r.Headers)
     31 	_, err = io.Copy(w, r.Reader)
     32 	return
     33 }
     34 
     35 // WriteContentType (Reader) writes custom ContentType.
     36 func (r Reader) WriteContentType(w http.ResponseWriter) {
     37 	writeContentType(w, []string{r.ContentType})
     38 }
     39 
     40 // writeHeaders writes custom Header.
     41 func (r Reader) writeHeaders(w http.ResponseWriter, headers map[string]string) {
     42 	header := w.Header()
     43 	for k, v := range headers {
     44 		if header.Get(k) == "" {
     45 			header.Set(k, v)
     46 		}
     47 	}
     48 }