package err import ( "fmt" "log" "os" ) type LogOption func(string) type ErrorCallback struct { Error error } func If(err error) *ErrorCallback { return &ErrorCallback{err} } func (err *ErrorCallback) ThenIf(f func() error) *ErrorCallback { if err.Error == nil { err.Error = f() } return err } func (err *ErrorCallback) Then(f func()) *ErrorCallback { if err.Error == nil { f() } return err } func (err *ErrorCallback) End() error { return err.Error } func Panic(err error) bool { if err != nil { log.Panic(err) return true } return false } func LogIf(err error, opts ...LogOption) bool { if err != nil { for _, opt := range opts { opt(err.Error()) } log.Println(err.Error()) return true } return false } func Log(msg string, opts ...LogOption) { for _, opt := range opts { opt(msg) } log.Println(msg) } func ExitIf(err error, msg string) { if err != nil { fmt.Fprintln(os.Stderr, msg, "Error:", err.Error()) os.Exit(1) } }