From 8fef53d44a57008dea411b882b12bc3d5d1ca2e0 Mon Sep 17 00:00:00 2001 From: Sergey Nastich Date: Wed, 12 Sep 2018 16:10:17 -0400 Subject: Add `Trimmed` tag and its logic (revisited) (#215) * Add option and iterable converters for transparent `@@ Trimmed` creation. * Move tagging stuff to a separate package - relieve `core.scala` from some extra code. * Add Tagging stuff and publishing section to README.md --- src/main/scala/xyz/driver/core/core.scala | 25 ++++--------------------- 1 file changed, 4 insertions(+), 21 deletions(-) (limited to 'src/main/scala/xyz/driver/core/core.scala') diff --git a/src/main/scala/xyz/driver/core/core.scala b/src/main/scala/xyz/driver/core/core.scala index 846bed3..2ab4e88 100644 --- a/src/main/scala/xyz/driver/core/core.scala +++ b/src/main/scala/xyz/driver/core/core.scala @@ -1,16 +1,15 @@ package xyz.driver -import scalaz.{Equal, Monad, OptionT} import eu.timepit.refined.api.{Refined, Validate} import eu.timepit.refined.collection.NonEmpty +import scalaz.{Equal, Monad, OptionT} import xyz.driver.core.rest.errors.ExternalServiceException +import xyz.driver.core.tagging.Tagged import scala.concurrent.{ExecutionContext, Future} // TODO: this package seems too complex, look at all the features we need! -import scala.language.reflectiveCalls -import scala.language.higherKinds -import scala.language.implicitConversions +import scala.language.{higherKinds, implicitConversions, reflectiveCalls} package object core { @@ -29,14 +28,7 @@ package object core { } } - object tagging { - private[core] trait Tagged[+V, +Tag] - - implicit class Taggable[V <: Any](val v: V) extends AnyVal { - def tagged[Tag]: V @@ Tag = v.asInstanceOf[V @@ Tag] - } - } - type @@[+V, +Tag] = V with tagging.Tagged[V, Tag] + type @@[+V, +Tag] = V with Tagged[V, Tag] implicit class OptionTExtensions[H[_]: Monad, T](optionTValue: OptionT[H, T]) { @@ -129,13 +121,4 @@ package core { final case class Base64(value: String) - trait Trimmed - - object Trimmed { - import tagging._ - - implicit def string2Trimmed(str: String): String @@ Trimmed = str.trim().tagged[Trimmed] - - implicit def name2Trimmed[T](name: Name[T]): Name[T] @@ Trimmed = Name[T](name.value.trim()).tagged[Trimmed] - } } -- cgit v1.2.3