openmeter / api /v3 /oasmiddleware /response.go
Leon4gr45's picture
Upload folder using huggingface_hub (part 4)
1f10f31 verified
Raw
History Blame Contribute Delete
1.47 kB
package oasmiddleware
import (
"bytes"
"net/http"
)
// ResponseWriterWrapper leverage to the original response write to be able to access
// the written body and the status code of the response. This is used in the response middleware
// but can also be used in a logging middleware to log the status code of the response.
type ResponseWriterWrapper struct {
w *http.ResponseWriter
body *bytes.Buffer
statusCode *int
}
func (rww ResponseWriterWrapper) Body() *bytes.Buffer {
return rww.body
}
func (rww ResponseWriterWrapper) StatusCode() *int {
return rww.statusCode
}
func NewResponseWriterWrapper(w http.ResponseWriter) ResponseWriterWrapper {
var (
buf bytes.Buffer
statusCode = 200
)
return ResponseWriterWrapper{
w: &w,
body: &buf,
statusCode: &statusCode,
}
}
// Write function overwrites the http.ResponseWriter Header() function
func (rww ResponseWriterWrapper) Write(buf []byte) (int, error) {
rww.body.Write(buf)
return (*rww.w).Write(buf)
}
// Header function overwrites the http.ResponseWriter Header() function
func (rww ResponseWriterWrapper) Header() http.Header {
return (*rww.w).Header()
}
// WriteHeader function overwrites the http.ResponseWriter WriteHeader() function
func (rww ResponseWriterWrapper) WriteHeader(statusCode int) {
*rww.statusCode = statusCode
(*rww.w).WriteHeader(statusCode)
}
func (rww ResponseWriterWrapper) Unwrap() http.ResponseWriter {
return *rww.w
}