You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@james.apache.org by rc...@apache.org on 2020/09/07 03:35:01 UTC

[james-project] 15/16: JAMES-3368 Use Try monad upon UnparsedEmailId parsing

This is an automated email from the ASF dual-hosted git repository.

rcordier pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/james-project.git

commit 9b79785f6b346227a10bfa1d656bbfce030ce6ce
Author: Benoit Tellier <bt...@linagora.com>
AuthorDate: Fri Sep 4 09:37:17 2020 +0700

    JAMES-3368 Use Try monad upon UnparsedEmailId parsing
---
 .../src/main/scala/org/apache/james/jmap/mail/Email.scala        | 9 ++++++---
 .../main/scala/org/apache/james/jmap/method/EmailGetMethod.scala | 9 ++++++++-
 2 files changed, 14 insertions(+), 4 deletions(-)

diff --git a/server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/mail/Email.scala b/server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/mail/Email.scala
index fc7294f..2d0e2a3 100644
--- a/server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/mail/Email.scala
+++ b/server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/mail/Email.scala
@@ -30,6 +30,8 @@ import org.apache.james.jmap.model.Properties
 import org.apache.james.mailbox.model.{MessageId, MessageResult}
 import org.slf4j.{Logger, LoggerFactory}
 
+import scala.util.{Failure, Success, Try}
+
 object Email {
   private val logger: Logger = LoggerFactory.getLogger(classOf[Email])
 
@@ -40,9 +42,10 @@ object Email {
   val allowedProperties: Properties = Properties("id", "size")
   val idProperty: Properties = Properties("id")
 
-  def asUnparsed(messageId: MessageId): UnparsedEmailId = refined.refineV[UnparsedEmailIdConstraint](messageId.serialize()) match {
-    case Left(e) => throw new IllegalArgumentException(e)
-    case scala.Right(value) => value
+  def asUnparsed(messageId: MessageId): Try[UnparsedEmailId] =
+    refined.refineV[UnparsedEmailIdConstraint](messageId.serialize()) match {
+    case Left(e) => Failure(new IllegalArgumentException(e))
+    case scala.Right(value) => Success(value)
   }
 
   type Size = Long Refined NonNegative
diff --git a/server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/method/EmailGetMethod.scala b/server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/method/EmailGetMethod.scala
index d4e5727..0eef5bf 100644
--- a/server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/method/EmailGetMethod.scala
+++ b/server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/method/EmailGetMethod.scala
@@ -39,11 +39,18 @@ import reactor.core.scala.publisher.{SFlux, SMono}
 import scala.jdk.CollectionConverters._
 
 object EmailGetResults {
+  private val logger: Logger = LoggerFactory.getLogger(classOf[EmailGetResults])
+
   def merge(result1: EmailGetResults, result2: EmailGetResults): EmailGetResults = result1.merge(result2)
   def empty(): EmailGetResults = EmailGetResults(Set.empty, EmailNotFound(Set.empty))
   def found(email: Email): EmailGetResults = EmailGetResults(Set(email), EmailNotFound(Set.empty))
   def notFound(emailId: UnparsedEmailId): EmailGetResults = EmailGetResults(Set.empty, EmailNotFound(Set(emailId)))
-  def notFound(messageId: MessageId): EmailGetResults = EmailGetResults(Set.empty, EmailNotFound(Set(Email.asUnparsed(messageId))))
+  def notFound(messageId: MessageId): EmailGetResults = Email.asUnparsed(messageId)
+    .fold(e => {
+        logger.error("messageId is not a valid UnparsedEmailId", e)
+        empty()
+      },
+      id => notFound(id))
 }
 
 case class EmailGetResults(emails: Set[Email], notFound: EmailNotFound) {


---------------------------------------------------------------------
To unsubscribe, e-mail: notifications-unsubscribe@james.apache.org
For additional commands, e-mail: notifications-help@james.apache.org