...
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 package middleware
16
17 import (
18 "net/http"
19
20 "github.com/go-openapi/runtime"
21 )
22
23 type errorResp struct {
24 code int
25 response interface{}
26 headers http.Header
27 }
28
29 func (e *errorResp) WriteResponse(rw http.ResponseWriter, producer runtime.Producer) {
30 for k, v := range e.headers {
31 for _, val := range v {
32 rw.Header().Add(k, val)
33 }
34 }
35 if e.code > 0 {
36 rw.WriteHeader(e.code)
37 } else {
38 rw.WriteHeader(http.StatusInternalServerError)
39 }
40 if err := producer.Produce(rw, e.response); err != nil {
41 Logger.Printf("failed to write error response: %v", err)
42 }
43 }
44
45
46 func NotImplemented(message string) Responder {
47 return Error(http.StatusNotImplemented, message)
48 }
49
50
51
52 func Error(code int, data interface{}, headers ...http.Header) Responder {
53 var hdr http.Header
54 for _, h := range headers {
55 for k, v := range h {
56 if hdr == nil {
57 hdr = make(http.Header)
58 }
59 hdr[k] = v
60 }
61 }
62 return &errorResp{
63 code: code,
64 response: data,
65 headers: hdr,
66 }
67 }
68
View as plain text