aboutsummaryrefslogtreecommitdiff
path: root/recover.go
blob: 00288e5a09e3e1cc0ce2c5660f93053ac43a7aa3 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
package main

import (
	gemini "sanctum.geek.nz/code/go-gemini.git.git"
)

// RecovererHandler wrap a Gemini handler and recover from panics
type RecovererHandler struct {
	handler gemini.Handler
}

// Handle implement the gemini.Handler interface by recovering inner handler
func (h RecovererHandler) Handle(req gemini.Request) (res gemini.Response) {
	defer func() {
		if r := recover(); r != nil {
			res = gemini.Response{Status: gemini.StatusTemporaryFailure, Meta: "Internal server error", Body: nil}
		}
	}()
	return h.handler.Handle(req)
}