Ophestra Umiker
42e0b168e3
All checks were successful
test / test (push) Successful in 17s
The behaviour of print functions from package fmt is not thread safe. Functions provided by fmsg wrap around Logger methods. This makes prefix much cleaner and makes it easy to deal with future changes to logging. Signed-off-by: Ophestra Umiker <cat@ophivana.moe>
57 lines
1.3 KiB
Go
57 lines
1.3 KiB
Go
package main
|
|
|
|
import (
|
|
"errors"
|
|
"fmt"
|
|
|
|
"git.ophivana.moe/security/fortify/internal/app"
|
|
"git.ophivana.moe/security/fortify/internal/fmsg"
|
|
)
|
|
|
|
func logWaitError(err error) {
|
|
var e *fmsg.BaseError
|
|
if !fmsg.AsBaseError(err, &e) {
|
|
fmsg.Println("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
|
|
fmsg.Print(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
|
|
fmsg.Print(e.Message())
|
|
} else {
|
|
errs := ej.Unwrap()
|
|
|
|
// every error here is wrapped in *app.BaseError
|
|
for _, ei := range errs {
|
|
var eb *fmsg.BaseError
|
|
if !errors.As(ei, &eb) {
|
|
// unreachable
|
|
fmsg.Println("invalid error type returned by revert:", ei)
|
|
} else {
|
|
// print inner *app.BaseError message
|
|
fmsg.Print(eb.Message())
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
func logBaseError(err error, message string) {
|
|
var e *fmsg.BaseError
|
|
|
|
if fmsg.AsBaseError(err, &e) {
|
|
fmsg.Print(e.Message())
|
|
} else {
|
|
fmt.Println(message, err)
|
|
}
|
|
}
|