Fallatól Config

Note: This is very much a work in progress.

Quickstart

Add to your dependencies:

 libraryDependencies += "org.fallatol" %% "fallatol-config" % "0.3.0"

Since fallatol-config is intended to work with sconfig so you may also want to add it to your dependencies as well:

libraryDependencies += "org.ekrich" %% "sconfig" % "1.8.1"

Example Usage

The example uses the following application.conf file:

origin {
  airport_code = "BOS"
  airport_name = "Boston Logan International Airport"
}

destination {
  airport_code = "KEF"
  airport_name = "Keflavíkurflugvöllur"
}

Example:

import fallatol.config._
import org.ekrich.config._

def loadConfig = {
  val config = ConfigFactory.load()
  
  for {
    origin <- config.get[String]("origin.airport_code")
    destination <- config.get[String]("destination.airport_code")
  } yield (origin, destination)
}

Example with custom ConfigMapper for a case class:

import fallatol.config._
import org.ekrich.config._

case class Airport(code: String, name: String)

object Airport {
  implicit val airportConfigMapper: ConfigMapper[Airport] =
    ConfigMapper.fromConfig(config =>
      for {
        code <- config.get[String]("code")
        name <- config.get[String]("name")
      } yield Airport(code, name))
}

def loadConfig: ConfigResult[(Aiport, Aiport)] = {
  val config = ConfigFactory.load()

  for {
    origin <- config.get[Airport]("origin")
    destination <- config.get[Airport]("destination")
  } yield (origin, destination)
}