From 2cdbc4e782c7ad7f42b1ddd3b7be6a24dea580e7 Mon Sep 17 00:00:00 2001 From: Julien Dessaux Date: Tue, 1 Oct 2024 08:47:32 +0200 Subject: feat(logger): implement a logger middleware --- pkg/logger/body_writer.go | 46 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 46 insertions(+) create mode 100644 pkg/logger/body_writer.go (limited to 'pkg/logger/body_writer.go') diff --git a/pkg/logger/body_writer.go b/pkg/logger/body_writer.go new file mode 100644 index 0000000..60da151 --- /dev/null +++ b/pkg/logger/body_writer.go @@ -0,0 +1,46 @@ +package logger + +import ( + "bufio" + "errors" + "net" + "net/http" +) + +type bodyWriter struct { + http.ResponseWriter + status int +} + +func newBodyWriter(writer http.ResponseWriter) *bodyWriter { + return &bodyWriter{ + ResponseWriter: writer, + status: http.StatusNotImplemented, + } +} + +// implements http.ResponseWriter +func (w *bodyWriter) Write(b []byte) (int, error) { + return w.ResponseWriter.Write(b) +} + +// implements http.ResponseWriter +func (w *bodyWriter) WriteHeader(code int) { + w.status = code + w.ResponseWriter.WriteHeader(code) +} + +// implements http.Flusher +func (w *bodyWriter) Flush() { + if f, ok := w.ResponseWriter.(http.Flusher); ok { + f.Flush() + } +} + +// implements http.Hijacker +func (w *bodyWriter) Hijack() (net.Conn, *bufio.ReadWriter, error) { + if hi, ok := w.ResponseWriter.(http.Hijacker); ok { + return hi.Hijack() + } + return nil, nil, errors.New("Hijack not supported") +} -- cgit v1.2.3