Codebase list golang-github-gobuffalo-packr / 2979ddd0-714e-48f0-ab10-8e4169f89474/main v2 / internal / takeon / github.com / markbates / safe / safe.go
2979ddd0-714e-48f0-ab10-8e4169f89474/main

Tree @2979ddd0-714e-48f0-ab10-8e4169f89474/main (Download .tar.gz)

safe.go @2979ddd0-714e-48f0-ab10-8e4169f89474/mainraw · history · blame

package safe

import (
	"errors"
	"fmt"
)

// Run the function safely knowing that if it panics
// the panic will be caught and returned as an error
func Run(fn func()) (err error) {
	return RunE(func() error {
		fn()
		return nil
	})
}

// Run the function safely knowing that if it panics
// the panic will be caught and returned as an error
func RunE(fn func() error) (err error) {
	defer func() {
		if err != nil {
			return
		}
		if ex := recover(); ex != nil {
			if e, ok := ex.(error); ok {
				err = e
				return
			}
			err = errors.New(fmt.Sprint(ex))
		}
	}()
	return fn()
}