diff options
| author | Ophestra Umiker <cat@ophivana.moe> | 2024-10-12 02:11:43 +0900 |
|---|---|---|
| committer | Ophestra Umiker <cat@ophivana.moe> | 2024-10-12 02:11:43 +0900 |
| commit | d5c26ae59339695623a64afdaeb07dee7161a9fd (patch) | |
| tree | d11b6c9349eea7a161b9bc098f78235dd9d9cb72 /error.go | |
| parent | 61b473a06fb12b9f3d6f9d7f07693313bd954509 (diff) | |
fortify: move error handling to separate file
Error handling here is way too monstrous due to terrible design of the internal/app package. Since rewriting internal/app will take a while, error handling is moved out of main to improve readability.
Signed-off-by: Ophestra Umiker <cat@ophivana.moe>
Diffstat (limited to 'error.go')
| -rw-r--r-- | error.go | 61 |
1 files changed, 61 insertions, 0 deletions
diff --git a/error.go b/error.go new file mode 100644 index 00000000..ee48684a --- /dev/null +++ b/error.go @@ -0,0 +1,61 @@ +package main + +import ( + "errors" + "fmt" + "os" + + "git.ophivana.moe/cat/fortify/internal/app" +) + +func logWaitError(err error) { + var e *app.BaseError + if !app.AsBaseError(err, &e) { + fmt.Println("fortify: wait failed:", err) + } else { + // Wait only returns either *app.ProcessError or *app.StateStoreError wrapped in a *app.BaseError + var se *app.StateStoreError + if !errors.As(err, &se) { + // does not need special handling + fmt.Print("fortify: " + e.Message()) + } else { + // inner error are either unwrapped store errors + // or joined errors returned by *appSealTx revert + // wrapped in *app.BaseError + var ej app.RevertCompoundError + if !errors.As(se.InnerErr, &ej) { + // does not require special handling + fmt.Print("fortify: " + e.Message()) + } else { + errs := ej.Unwrap() + + // every error here is wrapped in *app.BaseError + for _, ei := range errs { + var eb *app.BaseError + if !errors.As(ei, &eb) { + // unreachable + fmt.Println("fortify: invalid error type returned by revert:", ei) + } else { + // print inner *app.BaseError message + fmt.Print("fortify: " + eb.Message()) + } + } + } + } + } +} + +func logBaseError(err error, message string) { + var e *app.BaseError + + if app.AsBaseError(err, &e) { + fmt.Print("fortify: " + e.Message()) + } else { + fmt.Println(message, err) + } +} + +func fatalf(format string, a ...any) { + fmt.Printf("fortify: "+format, a...) + os.Exit(1) +} |
