master
go 30 lines 720 Bytes
Raw
1 package e
2
3 import (
4 "fmt"
5 "runtime/debug"
6 )
7
8 // TypeErr returns an error with a string that explains what error was expected and what was received.
9 func TypeErr(expected, actual any) error {
10 return fmt.Errorf("expected type %T, got %T", expected, actual)
11 }
12
13 // compile time type check that HandlerError is an error
14 var _ error = New(nil)
15
16 // HandlerError adds a stack trace to an error
17 type HandlerError struct {
18 Err error
19 Stack []byte
20 }
21
22 // Error makes HandlerError implement error
23 func (err HandlerError) Error() string {
24 return fmt.Sprintf("%s in:\n%s", err.Err.Error(), err.Stack)
25 }
26
27 // New returns a new HandlerError
28 func New(err error) HandlerError {
29 return HandlerError{Err: err, Stack: debug.Stack()}
30 }