Confuse

Parse and map configuration from multiple formats

Example

case class Foo(
  name: String,
  value: Int = 42
) derives confuse.default.Parser

case class Settings(
  x: Int = 2,
  data: Map[String, Foo]
) derives confuse.default.Parser

def main(args: Array[String]): Unit =

  // read raw config (this cannot fail except for syntax errors in the config files)
  val config = confuse.read(
    paths = Seq(os.sub / "confuse" / "example" / "src" / "config.yaml")
  )
  println("raw config result")
  println(config.dump())

  // map the config to a scala value or exit, showing any errors
  val settings = config.parseOrExit[Settings]()
  println("case class mapped result")
  println(settings)

Maven Coordinates

Scala 3, JVM and Native

ivy"io.crashbox::confuse::0.3.0"

Code Structure

Tthis the intended dependency graph between packages:

flowchart LR
  confuse .-> |export| confuse.api;
  confuse.api --> confuse.model;
  confuse.api --> confuse.formats;
  confuse.formats --> confuse.model;
  confuse.model --> confuse.parsers;
  confuse.api --> confuse.parsers;

Control flow

flowchart LR
  files --> |read| model;
  env --> |read| model;
  args --> |read| model;
  model --> |parse| scala-type;