github.com/tooploox/oya@v0.0.21-0.20230524103240-1cda1861aad6/cmd/internal/errors.go (about) 1 package internal 2 3 import ( 4 "fmt" 5 "io" 6 "strings" 7 8 "github.com/tooploox/oya/pkg/errors" 9 "github.com/tooploox/oya/pkg/task" 10 ) 11 12 func HandleError(out io.Writer, err error) int { 13 PrintError(out, err) 14 return ExitCode(err) 15 } 16 17 func PrintError(out io.Writer, err error) { 18 switch err := err.(type) { 19 case errors.Error: 20 printErrorWithTrace(out, err) 21 default: 22 printSep(out) 23 printError(out, err) 24 } 25 } 26 27 func ExitCode(err error) int { 28 var sfe task.ErrScriptFail 29 if errors.As(err, &sfe) { 30 return sfe.ExitCode 31 } 32 return 1 33 } 34 35 func printSep(out io.Writer) { 36 sepChar := "-" 37 sepWidth := 78 38 fmt.Fprintln(out, strings.Repeat(sepChar, sepWidth)) 39 } 40 41 func printErrorWithTrace(out io.Writer, err errors.Error) { 42 if cause := err.Cause(); cause != nil { 43 PrintError(out, cause) 44 } 45 printSep(out) 46 err.Print(out) 47 fmt.Fprintln(out) 48 } 49 50 func printError(out io.Writer, err error) { 51 fmt.Fprintln(out, "Error:", err) 52 fmt.Fprintln(out) 53 }