Add java Optional primitive to Scala converters

This commit is contained in:
Matthew de Detrich 2023-05-08 16:46:44 +02:00 committed by Matthew de Detrich
parent 0af7d3c5c1
commit 1248fcf7cb
3 changed files with 73 additions and 2 deletions

View file

@ -37,4 +37,17 @@ object Scala212CompatTest {
val scalaLongOption: Option[Long] = Some(1L)
val longOptionalToJavaPrimitive: OptionalLong = javaLongOptional.toJavaPrimitive
val longOptionToJavaPrimitive: OptionalLong = scalaLongOption.toJavaPrimitive
// from java optional primitive
val javaOptionalDouble: java.util.OptionalDouble = java.util.OptionalDouble.of(1.0)
val optionalDoubleToScala: Option[Double] = javaOptionalDouble.toScala
val optionalDoubleToJavaGeneric: Optional[Double] = javaOptionalDouble.toJavaGeneric
val javaOptionalInt: java.util.OptionalInt = java.util.OptionalInt.of(1)
val optionalIntToScala: Option[Int] = javaOptionalInt.toScala
val optionalIntToJavaGeneric: Optional[Int] = javaOptionalInt.toJavaGeneric
val javaOptionalLong: java.util.OptionalLong = java.util.OptionalLong.of(1L)
val optionalLongToScala: Option[Long] = javaOptionalLong.toScala
val optionalLongToJavaGeneric: Optional[Long] = javaOptionalLong.toJavaGeneric
}

View file

@ -11,7 +11,7 @@ package org.apache.pekko.util
import org.apache.pekko.annotation.InternalStableApi
import java.util.Optional
import java.util._
/**
* INTERNAL API
@ -35,4 +35,33 @@ private[pekko] object OptionConverters {
@inline def toJavaPrimitive[O](implicit specOp: SpecializerOfOptions[A, O]): O =
scala.compat.java8.OptionConverters.RichOptionForJava8(o).asPrimitive
}
implicit class RichOptionalDouble(private val o: OptionalDouble) extends AnyVal {
/** Convert a Java `OptionalDouble` to a Scala `Option` */
@inline def toScala: Option[Double] = scala.compat.java8.OptionConverters.RichOptionalDouble(o).asScala
/** Convert a Java `OptionalDouble` to a generic Java `Optional` */
@inline def toJavaGeneric: Optional[Double] = scala.compat.java8.OptionConverters.RichOptionalDouble(o).asGeneric
}
/** Provides conversions from `OptionalInt` to Scala `Option` and the generic `Optional` */
implicit class RichOptionalInt(private val o: OptionalInt) extends AnyVal {
/** Convert a Java `OptionalInt` to a Scala `Option` */
@inline def toScala: Option[Int] = scala.compat.java8.OptionConverters.RichOptionalInt(o).asScala
/** Convert a Java `OptionalInt` to a generic Java `Optional` */
@inline def toJavaGeneric: Optional[Int] = scala.compat.java8.OptionConverters.RichOptionalInt(o).asGeneric
}
/** Provides conversions from `OptionalLong` to Scala `Option` and the generic `Optional` */
implicit class RichOptionalLong(private val o: OptionalLong) extends AnyVal {
/** Convert a Java `OptionalLong` to a Scala `Option` */
@inline def toScala: Option[Long] = scala.compat.java8.OptionConverters.RichOptionalLong(o).asScala
/** Convert a Java `OptionalLong` to a generic Java `Optional` */
@inline def toJavaGeneric: Optional[Long] = scala.compat.java8.OptionConverters.RichOptionalLong(o).asGeneric
}
}

View file

@ -11,7 +11,7 @@ package org.apache.pekko.util
import org.apache.pekko.annotation.InternalStableApi
import java.util.Optional
import java.util._
import scala.jdk.OptionShape
/**
@ -34,4 +34,33 @@ private[pekko] object OptionConverters {
def toJavaPrimitive[O](implicit shape: OptionShape[A, O]): O =
scala.jdk.OptionConverters.RichOption(o).toJavaPrimitive
}
implicit class RichOptionalDouble(private val o: OptionalDouble) extends AnyVal {
/** Convert a Java `OptionalDouble` to a Scala `Option` */
@inline def toScala: Option[Double] = scala.jdk.OptionConverters.RichOptionalDouble(o).toScala
/** Convert a Java `OptionalDouble` to a generic Java `Optional` */
@inline def toJavaGeneric: Optional[Double] = scala.jdk.OptionConverters.RichOptionalDouble(o).toJavaGeneric
}
/** Provides conversions from `OptionalInt` to Scala `Option` and the generic `Optional` */
implicit class RichOptionalInt(private val o: OptionalInt) extends AnyVal {
/** Convert a Java `OptionalInt` to a Scala `Option` */
@inline def toScala: Option[Int] = scala.jdk.OptionConverters.RichOptionalInt(o).toScala
/** Convert a Java `OptionalInt` to a generic Java `Optional` */
@inline def toJavaGeneric: Optional[Int] = scala.jdk.OptionConverters.RichOptionalInt(o).toJavaGeneric
}
/** Provides conversions from `OptionalLong` to Scala `Option` and the generic `Optional` */
implicit class RichOptionalLong(private val o: OptionalLong) extends AnyVal {
/** Convert a Java `OptionalLong` to a Scala `Option` */
@inline def toScala: Option[Long] = scala.jdk.OptionConverters.RichOptionalLong(o).toScala
/** Convert a Java `OptionalLong` to a generic Java `Optional` */
@inline def toJavaGeneric: Optional[Long] = scala.jdk.OptionConverters.RichOptionalLong(o).toJavaGeneric
}
}