https://github.com/andr83/scalaconfig
Scala way to work with Typesafe Config
https://github.com/andr83/scalaconfig
config scala typesafe-config
Last synced: 4 months ago
JSON representation
Scala way to work with Typesafe Config
- Host: GitHub
- URL: https://github.com/andr83/scalaconfig
- Owner: andr83
- License: mit
- Created: 2016-08-15T15:58:19.000Z (almost 10 years ago)
- Default Branch: master
- Last Pushed: 2020-08-05T07:34:46.000Z (almost 6 years ago)
- Last Synced: 2025-03-30T07:22:25.779Z (over 1 year ago)
- Topics: config, scala, typesafe-config
- Language: Scala
- Homepage:
- Size: 44.9 KB
- Stars: 28
- Watchers: 4
- Forks: 3
- Open Issues: 1
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# scalaconfig
[](https://travis-ci.org/andr83/scalaconfig)
[](https://codecov.io/gh/andr83/scalaconfig)
[](https://maven-badges.herokuapp.com/maven-central/com.github.andr83/scalaconfig_2.11)
ScalaConfig is a lightweight wrapper over ~~Typesafe~~ Lightbend Config library provides scala friendly access.
It is implemented with type classes pattern and use shapeless for reading case classes.
> Current documentation is a actual for 0.7 version.
ScalaConfig adds additional metods:
* `as[A](path)` - return `Either[Seq[Throwable], A]` by path in config object
* `as[A]` - convert config object to `Either[Seq[Throwable], A]`
* `asUnsafe[A](path)` - return value of type `A` by path in config object. On fail a first exception will thrown.
* `asUnsafe[A]` - convert config object to value of type `A`. On fail a first exception will thrown.
## Supported types
* Primitive (`Int`, `Long`, `Float`, `Double`, `Boolean`)
* `String`, `Symbol`
* Typesafe `Config` and `ConfigValue`
* `FiniteDuration`
* `Properties`
* Collections (`List[A]`, `Set[A]`, `Map[String, A]`, `Map[String, AnyRef]`, `Array[A]`, etc. All types with a CanBuildFrom instance are supported)
* `Option[A]`
* Case classes
## Examples
```scala
import com.github.andr83.scalaconfig._
val config: Config = ConfigFactory.load()
val host = config.asUnsafe[String]("host")
val port = config.asUnsafe[Int]("port")
val path = config.asUnsafe[Option[String]]("path")
val users = config.asUnsafe[List[String]]("access.users")
case class DbConfig(host: String, port: Int, user: Option[String] = None, passwd: Option[String] = None)
val dbConfig: Reader.Result[DbConfig] = config.as[DbConfig]("db")
val dbConfig2: Reader.Result[DbConfig] = config.as[DbConfig] // Direct `config` mapping to case class
val dbConfig3: Reader.Result[Map[String, String]] = config.as[Map[String, String]]
val dbConfig3: Reader.Result[Map[String, AnyRef]]] = config.as[Map[String, AnyRef]]
// Custom reader
class User(name: String, password: String)
implicit def userReader: Reader[User] = Reader.pure((config: Config, path: String) => {
val userConfig = config.getConfig(path)
new User(
user = userConfig.asUnsafe[String]("name"),
password = userConfig.asUnsafe[String]("password")
)
}
})
// OR
implicit def userReader: Reader[User] = Reader.pureV((config: Config, path: String) => {
val userConfig = config.getConfig(path)
val userE = userConfig.as[String]("name")
val passwordE = userConfig.as[String]("password")
// with Cats or Scalaz it can be of course more elegant!
(userE, passwordE) match {
case (Right(user), Right(password)) => Right(new User(user, password))
case ( Left(errors1), Left(errors2)) => Left(errors1 ++ errors2)
case (Left(errors), _) => Left(errors)
case (_, Left(errors)) => Left(errors)
}
}
})
```
## Implementation details
https://andr83.io/en/1384/
## Usage
### Latest release.
```scala
// for >= Scala 2.11.x, 2.12.x, 2.13.x
libraryDependencies += "com.github.andr83" %% "scalaconfig" % "0.7"
```
If you want scala 2.10 support please use 0.4 version.
### Develop branch.
```scala
resolvers += Resolver.sonatypeRepo("snapshots")
libraryDependencies += "com.github.andr83" %% "scalaconfig" % "0.8-SNAPSHOT"
```
## License
MIT License
Copyright (c) 2016 Andrei Tupitcyn