From 8698d61e1de0554bb5f7cc6bfe1be9b262f9f3ef Mon Sep 17 00:00:00 2001 From: Tigor Hutasuhut Date: Tue, 14 May 2024 12:07:07 +0700 Subject: [PATCH] errs: fix duplicate error message --- pkg/errs/errs.go | 29 +++++++++++++++++++---------- 1 file changed, 19 insertions(+), 10 deletions(-) diff --git a/pkg/errs/errs.go b/pkg/errs/errs.go index a0882a1..7a314e6 100644 --- a/pkg/errs/errs.go +++ b/pkg/errs/errs.go @@ -68,25 +68,34 @@ func (er *Err) LogValue() slog.Value { return slog.GroupValue(values...) } -func (er *Err) Error() string { +func (e *Err) Error() string { s := strings.Builder{} - if er.message != "" { - s.WriteString(er.message) - if er.origin != nil { + if e.message != "" { + s.WriteString(e.message) + if e.origin != nil { s.WriteString(": ") } } - for unwrap := errors.Unwrap(er); unwrap != nil; { + unwrap := errors.Unwrap(e) + for unwrap != nil { + var current string if e, ok := unwrap.(Error); ok && e.GetMessage() != "" { - s.WriteString(e.GetMessage()) - s.WriteString(": ") - continue + current = e.GetMessage() + } else { + current = unwrap.Error() } - s.WriteString(unwrap.Error()) next := errors.Unwrap(unwrap) if next != nil { - s.WriteString(": ") + current, _ = strings.CutSuffix(current, next.Error()) + current, _ = strings.CutSuffix(current, ": ") } + if current != "" { + s.WriteString(current) + if next != nil { + s.WriteString(": ") + } + } + unwrap = next } return s.String()