Skip to content

Commit

Permalink
Merge 19bd2b6 into b48cffe
Browse files Browse the repository at this point in the history
  • Loading branch information
mdedetrich committed Aug 15, 2021
2 parents b48cffe + 19bd2b6 commit ae78d8e
Showing 1 changed file with 15 additions and 3 deletions.
18 changes: 15 additions & 3 deletions core/src/main/scala/pureconfig/BasicReaders.scala
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ import java.math.{BigDecimal => JavaBigDecimal, BigInteger}
import java.net.{URI, URL}
import java.nio.file.{Path, Paths}
import java.time._
import java.time.temporal.ChronoUnit
import java.time.{Duration => JavaDuration}
import java.util.UUID
import java.util.regex.Pattern
Expand Down Expand Up @@ -66,11 +67,19 @@ trait PrimitiveReaders {
*/
trait JavaEnumReader {

implicit def javaEnumReader[A <: java.lang.Enum[A]](implicit tag: ClassTag[A]): ConfigReader[A] =
private[pureconfig] def baseJavaEnumReader[A <: java.lang.Enum[A]](
transformValue: String => String
)(implicit tag: ClassTag[A]): ConfigReader[A] =
ConfigReader.fromString(catchReadError(s => {
val enumClass = tag.runtimeClass.asInstanceOf[Class[A]]
Enum.valueOf(enumClass, s)
Enum.valueOf(enumClass, transformValue(s))
}))

implicit def javaEnumReader[A <: java.lang.Enum[A]](implicit tag: ClassTag[A]): ConfigReader[A] =
baseJavaEnumReader[A](identity)

private[pureconfig] def mixedCaseJavaEnumReader[A <: java.lang.Enum[A]](implicit tag: ClassTag[A]): ConfigReader[A] =
baseJavaEnumReader[A](_.toUpperCase)
}

/** Trait containing `ConfigReader` instances for classes related to file system paths and URIs.
Expand All @@ -95,7 +104,7 @@ trait RegexReaders {

/** Trait containing `ConfigReader` instances for `java.time` classes.
*/
trait JavaTimeReaders {
trait JavaTimeReaders extends JavaEnumReader {

implicit val instantConfigReader: ConfigReader[Instant] =
ConfigReader.fromNonEmptyString[Instant](catchReadError(Instant.parse))
Expand All @@ -109,6 +118,9 @@ trait JavaTimeReaders {
implicit val periodConfigReader: ConfigReader[Period] =
ConfigReader.fromNonEmptyString[Period](PeriodUtils.fromString)

implicit val chronoUnitReader: ConfigReader[ChronoUnit] =
mixedCaseJavaEnumReader[ChronoUnit]

implicit val javaDurationConfigReader: ConfigReader[JavaDuration] =
ConfigReader.fromNonEmptyString[JavaDuration](catchReadError(JavaDuration.parse))

Expand Down

0 comments on commit ae78d8e

Please sign in to comment.