package magic import ( "encoding/json" "net/http" "github.com/gorilla/websocket" ) type RespondWriter interface { WriteResponse(http.ResponseWriter) } type RespondWriterFunc func(http.ResponseWriter) func (fn RespondWriterFunc) WriteResponse(w http.ResponseWriter) { fn(w) } type ErrorResponse interface { error WriteResponse(http.ResponseWriter) } func init() { RegisterExtractorThatTakesResponseWriterGeneric[http.ResponseWriter](func(w http.ResponseWriter, r *http.Request) (any, error) { return w, nil }) upgrader := &websocket.Upgrader{ Error: func(w http.ResponseWriter, r *http.Request, status int, reason error) { w.WriteHeader(status) json.NewEncoder(w).Encode(Map{ "error": reason.Error(), }) }, } RegisterExtractorThatTakesResponseWriterGeneric[*websocket.Conn](func(w http.ResponseWriter, r *http.Request) (any, error) { return upgrader.Upgrade(w, r, nil) }) }