package circe
Linear Supertypes
circe-config: A Typesafe config wrapper powered by circe.
circe-config: A Typesafe config wrapper powered by circe.
scala> import com.typesafe.config.ConfigFactory scala> import io.circe.generic.auto._ scala> import io.circe.config.syntax._ scala> case class ServerSettings(host: String, port: Int, ssl: Option[String]) scala> case class HttpSettings(server: ServerSettings, version: Double) scala> case class AppSettings(http: HttpSettings) scala> val config = ConfigFactory.parseString("http { version = 1.1, server { host = localhost, port = 8080 } }") scala> config.as[ServerSettings]("http.server") res0: Either[io.circe.Error, ServerSettings] = Right(ServerSettings(localhost,8080,None)) scala> config.as[HttpSettings]("http") res1: Either[io.circe.Error, HttpSettings] = Right(HttpSettings(ServerSettings(localhost,8080,None),1.1)) scala> config.as[AppSettings] res2: Either[io.circe.Error, AppSettings] = Right(AppSettings(HttpSettings(ServerSettings(localhost,8080,None),1.1))) scala> import cats.effect.IO scala> config.asF[IO, AppSettings] res3: IO[AppSettings] = IO(AppSettings(HttpSettings(ServerSettings(localhost,8080,None),1.1))) scala> import io.circe.config.parser scala> val settings = parser.decodeF[IO, AppSettings]() scala> settings.unsafeRunSync() res4: AppSettings = AppSettings(HttpSettings(ServerSettings(localhost,8080,None),1.1))
Limitations for numerical types: Typesafe config uses Java's int, long and double types to represent numbers. In some cases, double values may be represented internally as long after a roundtrip since the HOCON formatting is not stable. Also, precision may be lost when converting from circe's JsonNumber to Typesafe config's number representation (as can be seen in the test for the printer laws).