package middleware

// The original work was derived from Goji's middleware, source:
// https://github.com/zenazn/goji/tree/master/web/middleware

import (
  "net/http"

  "n.eko.moe/neko/internal/http/endpoint"
)

func Recoverer(next http.Handler) http.Handler {
  fn := func(w http.ResponseWriter, r *http.Request) {
    defer func() {
      if rvr := recover(); rvr != nil {
        endpoint.WriteError(w, r, rvr)
      }
    }()

    next.ServeHTTP(w, r)
  }

  return http.HandlerFunc(fn)
}