-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathsender.go
More file actions
37 lines (30 loc) · 1.01 KB
/
sender.go
File metadata and controls
37 lines (30 loc) · 1.01 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
package errors
import "net/http"
// Logger is a simple error logger.
type Logger interface{ Println(...interface{}) }
// Sender is a function that sends an error through the provided response writer.
type Sender func(http.ResponseWriter, interface{})
// Middleware is a chainable sender wrapper func.
type Middleware func(Sender) Sender
// WithLogger wrapps provided sender with logger.
//
// Example: errors.LoggerWrapper(logger)(errors.Send)(w, err)
func WithLogger(logger Logger) Middleware {
return func(sender Sender) Sender {
return func(w http.ResponseWriter, err interface{}) {
logger.Println(err)
sender(w, err)
}
}
}
// ResponseLogger provides another (object oriented) approach to log the error.
//
// Example: (&errors.ResponseLogger{Logger: logger}).Log(errors.Send)(w, err)
type ResponseLogger struct{ Logger }
// Log creates Sender middleware func.
func (rl *ResponseLogger) Log(sender Sender) Sender {
return func(w http.ResponseWriter, err interface{}) {
rl.Println(err)
sender(w, err)
}
}