trepa/internal/core/http.go
2025-02-20 12:09:38 +00:00

62 lines
1.1 KiB
Go

package core
import (
"net/http"
)
type Response struct {
http.ResponseWriter
Status int
Size int
}
func NewResponse(w http.ResponseWriter) *Response {
return &Response{
ResponseWriter: w,
Status: 200,
Size: 0,
}
}
func (r *Response) Header() http.Header {
return r.ResponseWriter.Header()
}
func (r *Response) WriteHeader(status int) {
r.Status = status
}
func (r *Response) Json(json []byte) {
r.Header().Set("Content-Type", "application/json")
r.Write(json)
}
func (r *Response) Write(b []byte) (int, error) {
r.ResponseWriter.WriteHeader(r.Status)
n, err := r.ResponseWriter.Write(b)
r.Size += n
return n, err
}
type ServerMux struct {
mux *http.ServeMux
}
func NewServerMux() *ServerMux {
return &ServerMux{
mux: http.NewServeMux(),
}
}
func (s *ServerMux) HandleFunc(pattern string, handler func(w *Response, r *http.Request)) {
s.mux.HandleFunc(pattern, func(w http.ResponseWriter, r *http.Request) {
response := NewResponse(w)
LogMiddleware(ErrorMiddleware(handler))(response, r)
})
}
func (s *ServerMux) ServeHTTP(w http.ResponseWriter, r *http.Request) {
s.mux.ServeHTTP(w, r)
}