May 07, 2019

Tari Protocol Discussion 35

On Thursday, the Tari community discussed the config strategy. Below is the TL;DR on Thursday’s conversation (full transcript included below):

  • Use config-rs
  • Use TOML file format
  • Use clap-rs for command line integration

Join us for our next discussion on Freenode in #tari-dev.

Discussion times proposed by the Tari community:

Mondays: 6pm CAT (12pm EST)

Thursdays: 11am CAT (5am EST)

To keep up with the latest Tari developments, you can follow the project on Twitter.

Transcript of Thursday’s discussion

17:55 <Blackwolfsa>  Hi everyone, I thought we could talk about configs a bit, anyone have any options on them
18:02 <simian_za>  ini files?
18:02 <simian_za>  :P
18:04 <Hansie>  Do you want the configs to be cleverly handled? Or are we talking about binary dumps?
18:07 <Blackwolfsa>  Clearly
18:08 <stanimal>  Hi there, so suppose we need to go over: how would people want to deploy and use the Tari software as well as what format to use for configuration files (options are YAML, TOML and JSON - no not ini :P)
18:08 <Blackwolfsa>  I was thinking of using config-rs for the config handling, it can deseriliase to a struct, and do hahsmaps
18:09 <Blackwolfsa>  We could have multiple configs as well
18:09 <Blackwolfsa>  And it does uni for simian
18:09 <Blackwolfsa>  :P
18:09 <Blackwolfsa>  Ini
18:09 <simian_za>  Woot!
18:12 <neonknight64>  If more than one format is used, then samples for each type should be provided.
18:13 <Blackwolfsa>  As far as I know it works on a key value lookup. It even supports multiple formats at the same time if you want to be crazy 
18:13 <simian_za>  Should probably just settle on one and run with it. Yaml and toml is better than json I think
18:15 <stanimal>  I suggest the precedence for configuration would be command line flags (for some config items perhaps), configuration file(s) and then environment variables - running software in docker would imply it's good to support environment variables, although configuration solely through environment variables may be unwieldy and it's completely fine to use
18:15 <stanimal>  a configuration file with docker
18:15 <stanimal>  As for the format, we want a format which supports comments - which leaves JSON out
18:16 <simian_za>  Agreed on that hierarchy
18:16 <simian_za>  So yaml vs toml? Opinions?
18:18 <Hansie>  stanimal: Can use of environment variables be seamlessly done between Linux/macOS and Windows using these tools?
18:18 <stanimal>  I think TOML is the best option, as it's very readable, it doesn't break randomly if you have a mistake in your indentation somewhere like yaml, you can nest keys in sections
18:19 <stanimal>  Hansie: Environment variables will have cross platform support with standard rust
18:19 <Hansie>  I was wondering about nesting...
18:19 <simian_za>  Also toml is used for rust so only have become familiar with one syntax
18:21 <Hansie>  "Tom's Obvious, Minimal Language"
18:21 <stanimal>  Technically, we could probably decide on the format by looking at the file extension and using the correct deserializer - but I'm hesitant to support multiple formats as that usually results in a mess
18:21 <Hansie>  I tend to agree with that stanimal
18:25 <neonknight64>  A single format that supports comments seem like the best choice. TOML ftw
18:26 <stanimal>  One thing YAML does is allows you to reference other keys in the configuration file (albeit with a somewhat ugly syntax) which could help DRY it up - AFAIK toml doesnt support this, but I somehow doubt that this will be needed in the config files
18:31 <Hansie>  Balckwolfsa, config-rs seems pretty solid.
18:31 <Hansie>  Blackwolfsa ^
18:32 <stanimal>  Agreed - looks great
18:32 <Blackwolfsa>  So looks like to toml has majority 
18:33 <stanimal>  What about a command line handler - I've used https://github.com/clap-rs/clap in the past
clap-rs/clap
A full featured, fast Command Line Argument Parser for Rust - clap-rs/clap
18:34 <stanimal>  Seems to have minimal required dependencies 👍
18:34 <simian_za>  This is going to sound wrong but +1 for the Clap
18:35 <stanimal>  😆I've love to have the clap...
18:35 <stanimal>  ...in our project
18:36 <Blackwolfsa>  We need the clap
18:38 <Hansie>  Yip, looks great as well
18:52 <stanimal>  There's an issue for this: https://github.com/tari-project/tari/issues/250 - nice one to take if you're looking to start contributing. A good PR could be to add some code to base_layer to read from a given config file and deserialize to an empty config struct
Tari config file · Issue #250 · tari-project/tari
Design and build an easy to use and configure ConfigurationFile. Maybe there's a crate that can do this for us? TOML, YAML, JSON? Discuss
18:54 <Blackwolfsa>  Looking at the examples that would be a very easy issue if you want to contribute