From 41f8a8cb002df7c79ffd264698c38d98dfe989e5 Mon Sep 17 00:00:00 2001 From: Vasiliy Tolstov Date: Wed, 18 Mar 2020 03:10:38 +0300 Subject: [PATCH] errors: add FromError func (#1362) Signed-off-by: Vasiliy Tolstov --- errors/errors.go | 10 ++++++++++ errors/errors_test.go | 14 ++++++++++++++ 2 files changed, 24 insertions(+) diff --git a/errors/errors.go b/errors/errors.go index 6c6598aa..70ffca9a 100644 --- a/errors/errors.go +++ b/errors/errors.go @@ -116,6 +116,7 @@ func InternalServerError(id, format string, a ...interface{}) error { } } +// Equal tries to compare errors func Equal(err1 error, err2 error) bool { verr1, ok1 := err1.(*Error) verr2, ok2 := err2.(*Error) @@ -134,3 +135,12 @@ func Equal(err1 error, err2 error) bool { return true } + +// FromError try to convert go error to *Error +func FromError(err error) *Error { + if verr, ok := err.(*Error); ok && verr != nil { + return verr + } + + return Parse(err.Error()) +} diff --git a/errors/errors_test.go b/errors/errors_test.go index 662dd8d0..44e72190 100644 --- a/errors/errors_test.go +++ b/errors/errors_test.go @@ -6,6 +6,20 @@ import ( "testing" ) +func TestFromError(t *testing.T) { + err := NotFound("go.micro.test", "%s", "example") + merr := FromError(err) + if merr.Id != "go.micro.test" || merr.Code != 404 { + t.Fatalf("invalid conversation %v != %v", err, merr) + } + err = er.New(err.Error()) + merr = FromError(err) + if merr.Id != "go.micro.test" || merr.Code != 404 { + t.Fatalf("invalid conversation %v != %v", err, merr) + } + +} + func TestEqual(t *testing.T) { err1 := NotFound("myid1", "msg1") err2 := NotFound("myid2", "msg2")