From 6eae1a65c4aabbfcd368b648ff47914458b477bf Mon Sep 17 00:00:00 2001 From: Aine Date: Sat, 27 Aug 2022 22:38:23 +0300 Subject: [PATCH] add utils.UnwrapError() to provide meaningful error messages --- bot/email.go | 2 +- bot/settings.go | 4 ++-- utils/matrix.go | 27 +++++++++++++++++++++++++++ 3 files changed, 30 insertions(+), 3 deletions(-) diff --git a/bot/email.go b/bot/email.go index b82f9d5..4c142b9 100644 --- a/bot/email.go +++ b/bot/email.go @@ -68,7 +68,7 @@ func (b *Bot) Send(ctx context.Context, email *utils.Email) error { content := email2content(email, cfg, threadID) eventID, serr := b.lp.Send(roomID, content) if serr != nil { - return serr + return utils.UnwrapError(serr) } if threadID == "" && !cfg.NoThreads() { diff --git a/bot/settings.go b/bot/settings.go index ad37899..bc933ed 100644 --- a/bot/settings.go +++ b/bot/settings.go @@ -112,9 +112,9 @@ func (b *Bot) getSettings(roomID id.RoomID) (settings, error) { } } - return config, err + return config, utils.UnwrapError(err) } func (b *Bot) setSettings(roomID id.RoomID, cfg settings) error { - return b.lp.GetClient().SetRoomAccountData(roomID, settingskey, cfg) + return utils.UnwrapError(b.lp.GetClient().SetRoomAccountData(roomID, settingskey, cfg)) } diff --git a/utils/matrix.go b/utils/matrix.go index faa2a54..0115996 100644 --- a/utils/matrix.go +++ b/utils/matrix.go @@ -1,6 +1,7 @@ package utils import ( + "maunium.net/go/mautrix" "maunium.net/go/mautrix/event" "maunium.net/go/mautrix/id" ) @@ -24,3 +25,29 @@ func RelatesTo(noThreads bool, parentID id.EventID) *event.RelatesTo { EventID: parentID, } } + +// UnwrapError tries to unwrap a error into something meaningful, like mautrix.HTTPError or mautrix.RespError +func UnwrapError(err error) error { + switch err.(type) { + case nil: + return nil + case mautrix.HTTPError: + return unwrapHTTPError(err) + default: + return err + } +} + +func unwrapHTTPError(err error) error { + httperr, ok := err.(mautrix.HTTPError) + if !ok { + return err + } + + uwerr := httperr.Unwrap() + if uwerr != nil { + return uwerr + } + + return httperr +}