EXPERIMENTAL
EXPERIMENTAL
Assumption. All keys should start with -
This source supports almost all standard command-line patterns including nesting/sub-config, repetition/list etc
Example:
Given:
args = "-db.username=1 --db.password=hi --vault -username=3 --vault -password=10 --regions 111,122 --user k1 --user k2" keyDelimiter = Some('.') valueDelimiter = Some(',')
then, the following works:
final case class Credentials(username: String, password: String) val credentials = (string("username") zip string("password")).to[Credentials] final case class Config(databaseCredentials: Credentials, vaultCredentials: Credentials, regions: List[String], users: List[String]) (nested("db") { credentials } zip nested("vault") { credentials } zip list("regions")(string) zip list("user")(string)).to[Config] // res0 Config(Credentials(1, hi), Credentials(3, 10), List(111, 122), List(k1, k2))
Provide keyDelimiter if you need to consider flattened config as a nested config.
Provide keyDelimiter if you need to consider flattened config as a nested config. Provide valueDelimiter if you need any value to be a list
Example:
Given:
map = Map("KAFKA_SERVERS" -> "server1, server2", "KAFKA_SERDE" -> "confluent") keyDelimiter = Some('_') valueDelimiter = Some(',')
then, the following works:
final case class kafkaConfig(server: String, serde: String) nested("KAFKA")(string("SERVERS") zip string("SERDE")).to[KafkaConfig]
Provide keyDelimiter if you need to consider flattened config as a nested config.
Provide keyDelimiter if you need to consider flattened config as a nested config.
Example:
Given:
map = Map("KAFKA_SERVERS" -> singleton(server1), "KAFKA_SERDE" -> singleton("confluent")) keyDelimiter = Some('_')
then, the following works:
final case class kafkaConfig(server: String, serde: String) nested("KAFKA")(string("SERVERS") zip string("SERDE")).to[KafkaConfig]
Provide keyDelimiter if you need to consider flattened config as a nested config.
Provide keyDelimiter if you need to consider flattened config as a nested config. Provide valueDelimiter if you need any value to be a list
Example:
Given:
property = "KAFKA.SERVERS" = "server1, server2" ; "KAFKA.SERDE" = "confluent" keyDelimiter = Some('.') valueDelimiter = Some(',')
then, the following works:
final case class kafkaConfig(server: String, serde: String) nested("KAFKA")(string("SERVERS") zip string("SERDE")).to[KafkaConfig]
Provide keyDelimiter if you need to consider flattened config as a nested config.
Provide keyDelimiter if you need to consider flattened config as a nested config. Provide valueDelimiter if you need any value to be a list
Example:
Given:
properties (in file) = "KAFKA.SERVERS" = "server1, server2" ; "KAFKA.SERDE" = "confluent" keyDelimiter = Some('.') valueDelimiter = Some(',')
then, the following works:
final case class kafkaConfig(server: String, serde: String) nested("KAFKA")(string("SERVERS") zip string("SERDE")).to[KafkaConfig]
To obtain a config source directly from a property tree.
To obtain a config source directly from a property tree.
: PropertyTree
: Label the source with a name
Consider providing keyDelimiter if you need to consider flattened config as a nested config.
Consider providing keyDelimiter if you need to consider flattened config as a nested config. Consider providing valueDelimiter if you need any value to be a list
Example:
Given:
vars in sys.env = "KAFKA_SERVERS" = "server1, server2" ; "KAFKA_SERDE" = "confluent" keyDelimiter = Some('_') valueDelimiter = Some(',')
then, the following works:
final case class kafkaConfig(server: String, serde: String) nested("KAFKA")(string("SERVERS") zip string("SERDE")).to[KafkaConfig]
With filterKeys, you can choose to filter only those keys that needs to be considered.
Note: The delimiter '.' for keys doesn't work in system environment.
Consider providing keyDelimiter if you need to consider flattened config as a nested config.
Consider providing keyDelimiter if you need to consider flattened config as a nested config. Consider providing valueDelimiter if you need any value to be a list
Example:
Given:
vars in sys.props = "KAFKA.SERVERS" = "server1, server2" ; "KAFKA.SERDE" = "confluent" keyDelimiter = Some('.') valueDelimiter = Some(',')
then, the following works:
final case class kafkaConfig(server: String, serde: String) nested("KAFKA")(string("SERVERS") zip string("SERDE")).to[KafkaConfig]