You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@james.apache.org by ma...@apache.org on 2023/02/22 20:14:00 UTC

[james-project] 03/08: Make EntityType more idiomatic

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

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

commit 3879a92ff29b733bb0797c6d773d5ef9d991e5cd
Author: Matthieu Baechler <ma...@baechler-craftsmanship.fr>
AuthorDate: Thu Feb 9 21:53:35 2023 +0100

    Make EntityType more idiomatic
---
 .../james/transport/mailets/EntityType.scala       | 32 ++++++++++------------
 1 file changed, 15 insertions(+), 17 deletions(-)

diff --git a/server/mailet/rate-limiter/src/main/scala/org/apache/james/transport/mailets/EntityType.scala b/server/mailet/rate-limiter/src/main/scala/org/apache/james/transport/mailets/EntityType.scala
index cf9d87b979..0751bb6a35 100644
--- a/server/mailet/rate-limiter/src/main/scala/org/apache/james/transport/mailets/EntityType.scala
+++ b/server/mailet/rate-limiter/src/main/scala/org/apache/james/transport/mailets/EntityType.scala
@@ -21,10 +21,10 @@ package org.apache.james.transport.mailets
 
 import java.time.Duration
 import java.time.temporal.ChronoUnit
-
 import eu.timepit.refined.auto._
 import org.apache.james.rate.limiter.api.Increment.Increment
 import org.apache.james.rate.limiter.api.{AllowedQuantity, Increment, Rule, Rules}
+import org.apache.james.transport.mailets.ConfigurationOps.{OptionOps, SizeOps}
 import org.apache.james.util.DurationParser
 import org.apache.mailet.{Mail, MailetConfig}
 
@@ -36,12 +36,22 @@ object ConfigurationOps {
 
   implicit class OptionOps(mailetConfig: MailetConfig) {
     def getOptionalString(key: String): Option[String] = Option(mailetConfig.getInitParameter(key))
+    def getOptionalLong(key: String): Option[Long] = Option(mailetConfig.getInitParameter(key)).map(_.toLong)
   }
 
   implicit class DurationOps(mailetConfig: MailetConfig) {
     def getDuration(key: String): Option[Duration] = mailetConfig.getOptionalString(key)
       .map(string => DurationParser.parse(string, ChronoUnit.SECONDS))
   }
+
+  implicit class SizeOps(mailetConfig: MailetConfig) {
+    def getOptionalSize(key: String): Option[org.apache.james.util.Size] = mailetConfig.getOptionalString(key)
+      .map {
+        case "" => throw new IllegalArgumentException(s"'$key' field cannot be empty if specified")
+        case s => s
+      }
+      .map(org.apache.james.util.Size.parse)
+  }
 }
 
 
@@ -58,8 +68,7 @@ case object Count extends EntityType {
 
   override def extractQuantity(mail: Mail): Option[Increment] = Some(1)
 
-  override def extractRules(duration: Duration, mailetConfig: MailetConfig): Option[Rules] = Option(mailetConfig.getInitParameter("count"))
-    .map(_.toLong)
+  override def extractRules(duration: Duration, mailetConfig: MailetConfig): Option[Rules] = mailetConfig.getOptionalLong("count")
     .map(AllowedQuantity.liftOrThrow)
     .map(quantity => Rules(Seq(Rule(quantity, duration))))
 }
@@ -69,8 +78,7 @@ case object RecipientsType extends EntityType {
 
   override def extractQuantity(mail: Mail): Option[Increment] = Some(Increment.liftOrThrow(mail.getRecipients.size()))
 
-  override def extractRules(duration: Duration, mailetConfig: MailetConfig): Option[Rules] = Option(mailetConfig.getInitParameter("recipients"))
-    .map(_.toLong)
+  override def extractRules(duration: Duration, mailetConfig: MailetConfig): Option[Rules] = mailetConfig.getOptionalLong("recipients")
     .map(AllowedQuantity.liftOrThrow)
     .map(quantity => Rules(Seq(Rule(quantity, duration))))
 }
@@ -80,12 +88,7 @@ case object Size extends EntityType {
 
   override def extractQuantity(mail: Mail): Option[Increment] = Some(Increment.liftOrThrow(mail.getMessageSize.toInt))
 
-  override def extractRules(duration: Duration, mailetConfig: MailetConfig): Option[Rules] = Option(mailetConfig.getInitParameter("size"))
-    .map {
-      case "" => throw new IllegalArgumentException("'size' field cannot be empty if specified")
-      case s => s
-    }
-    .map(org.apache.james.util.Size.parse)
+  override def extractRules(duration: Duration, mailetConfig: MailetConfig): Option[Rules] = mailetConfig.getOptionalSize("size")
     .map(_.asBytes())
     .map(AllowedQuantity.liftOrThrow)
     .map(quantity => Rules(Seq(Rule(quantity, duration))))
@@ -99,12 +102,7 @@ case object TotalSize extends EntityType {
       .map(Increment.liftOrThrow)
       .toOption
 
-  override def extractRules(duration: Duration, mailetConfig: MailetConfig): Option[Rules] = Option(mailetConfig.getInitParameter("totalSize"))
-    .map {
-      case "" => throw new IllegalArgumentException("'totalSize' field cannot be empty if specified")
-      case s => s
-    }
-    .map(org.apache.james.util.Size.parse)
+  override def extractRules(duration: Duration, mailetConfig: MailetConfig): Option[Rules] = mailetConfig.getOptionalSize("totalSize")
     .map(_.asBytes())
     .map(AllowedQuantity.liftOrThrow)
     .map(quantity => Rules(Seq(Rule(quantity, duration))))


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