From 4c74ebc1c7c934e35c4bcc67475f7ff72e4a07ee Mon Sep 17 00:00:00 2001 From: H0llyW00dzZ Date: Sat, 25 Jan 2025 06:40:23 +0000 Subject: [PATCH] Improve [Imap] [Client] Error Handling (#16) - [+] feat(config.go): add error variables for client connection and body reading failures - [+] refactor(export_messages.go, list_mailboxes.go, list_messages.go): replace error messages with new error variables Reviewed-on: https://git.b0zal.io/H0llyW00dzZ/imap/pulls/16 Co-authored-by: H0llyW00dzZ Co-committed-by: H0llyW00dzZ --- client/config.go | 14 +++++++++++++- client/export_messages.go | 2 +- client/list_mailboxes.go | 2 +- client/list_messages.go | 4 ++-- 4 files changed, 17 insertions(+), 5 deletions(-) diff --git a/client/config.go b/client/config.go index e61b781..86927a9 100644 --- a/client/config.go +++ b/client/config.go @@ -5,7 +5,11 @@ package client -import "github.com/emersion/go-imap/client" +import ( + "errors" + + "github.com/emersion/go-imap/client" +) // Config holds the configuration for the IMAP client type Config struct { @@ -35,3 +39,11 @@ type IMAPClient struct { config *Config client *client.Client } + +var ( + // ErrorsClientIsNotConnected is returned when an operation is attempted on a client that is not connected. + ErrorsClientIsNotConnected = errors.New("client is not connected") + + // ErrorsFailedToReadBody is returned when there is a failure in reading the body of a message. + ErrorsFailedToReadBody = errors.New("failed to read body") +) diff --git a/client/export_messages.go b/client/export_messages.go index 68f25f8..d9189e4 100644 --- a/client/export_messages.go +++ b/client/export_messages.go @@ -15,7 +15,7 @@ import ( // ExportMessagesTo uses the provided exporter to write messages to the writer func (c *IMAPClient) ExportMessagesTo(writer io.Writer, exporter export.Exporter, mailbox string, numMessages uint32, config MessageConfig) error { if c.client == nil { - return fmt.Errorf("client is not connected") + return ErrorsClientIsNotConnected } // Fetch messages based on the provided MessageConfig and number of messages diff --git a/client/list_mailboxes.go b/client/list_mailboxes.go index d591cec..44d82d8 100644 --- a/client/list_mailboxes.go +++ b/client/list_mailboxes.go @@ -14,7 +14,7 @@ import ( // ListMailboxes retrieves all available mailboxes for the connected user func (c *IMAPClient) ListMailboxes() ([]string, error) { if c.client == nil { - return nil, fmt.Errorf("client is not connected") + return nil, ErrorsClientIsNotConnected } mailboxes := make(chan *imap.MailboxInfo, 10) diff --git a/client/list_messages.go b/client/list_messages.go index 74d456a..fe4fa78 100644 --- a/client/list_messages.go +++ b/client/list_messages.go @@ -41,7 +41,7 @@ const ( // ListMessages lists the messages in the specified mailbox based on the MessageConfig func (c *IMAPClient) ListMessages(mailbox string, numMessages uint32, config MessageConfig) ([]map[string]any, error) { if c.client == nil { - return nil, fmt.Errorf("client is not connected") + return nil, ErrorsClientIsNotConnected } mbox, err := c.selectMailbox(mailbox) @@ -194,7 +194,7 @@ func (c *IMAPClient) extractBody(body map[*imap.BodySectionName]imap.Literal) (s return result, nil } bytebufferpool.Put(buf) - return "", fmt.Errorf("failed to read body") + return "", ErrorsFailedToReadBody } return "", nil }