-
Notifications
You must be signed in to change notification settings - Fork 1
Add Evidence-Based Getters for play.api.Configuration Instances #8
Copy link
Copy link
Open
Labels
Description
The API around Configuration is inflexible. Proposed additions:
import com.typesafe.config.ConfigFactory
import play.api.Configuration
import scala.concurrent.duration._
val configuration =
Configuration(ConfigFactory.parseString(
"""
|string: string
|number: 10
|duration: 10 hours
""".stripMargin
))
trait ConfigurationReader[T] {
def read(c: Configuration, path: String): Option[T]
}
implicit case object StringReader extends ConfigurationReader[String] {
override def read(c: Configuration, path: String): Option[String] = c.getString(path)
}
implicit case object DurationReader extends ConfigurationReader[Duration] {
override def read(c: Configuration, path: String): Option[Duration] = c.getString(path).map(Duration(_))
}
def get[T](c: Configuration, path: String)(implicit r: ConfigurationReader[T]): Option[T] = r.read(c, path)
assert(get[String](configuration, "string") == configuration.getString("string"))
assert(get[Duration](configuration, "duration").contains(10 hours))Error handling is TBD.
Reactions are currently unavailable