On Wed, Nov 24, 2021 at 5:55 AM Jacek Lewandowski <lewandowski.ja...@gmail.com> wrote: > > I am just wondering how to represent in properties things like lists of > non-scalar values? >
In my experience properties are not sufficient for complex configuration sorta for this reason, that's why using structured YAML (or any structured configuration language) is so much more powerful than a properties file. I think if we leaned into structured configuration we'd have mostly maps of maps pointing to scalars which are well addressed by dot encoding. Dot encoding only works down to the first non scalar/object leaf node and then the value needs to be structured. So a list of maps for example would be in the value, for example in {"a": {"b": 4, "c": [{"d": 3}, {"d": 2}]}} you'd be able to query for 'a.b' -> 4 or 'a.b.c' -> [{"d": 3}, {"d": 2}]. Single scalar values are valid JSON so if we have to have a text -> text encoding I'd go for the key is the dot encoded key and the value is the JSON encoded value, that's maybe the easiest way to generically represent complex structured configuration in a flat key->value mapping. I think Elasticsearch's live reconfiguration API [1] which accepts dot encoded JSON and merges with on disk YAML and Puppet's Hiera configuration language [2] which allows you to index into YAMLs using dot encoding are some great interfaces for us to study. The latter even allows the user to query into lists by using a number as the key (similar to jq[3] except without the square brackets) so you could ask for 'a.b.c.0' and get back {"d": 3}. -Joey [1] https://www.elastic.co/guide/en/elasticsearch/reference/current/cluster-update-settings.html [2] https://puppet.com/docs/puppet/6/function.html#get [3] https://stedolan.github.io/jq/manual/ --------------------------------------------------------------------- To unsubscribe, e-mail: dev-unsubscr...@cassandra.apache.org For additional commands, e-mail: dev-h...@cassandra.apache.org