Skip to content
Snippets Groups Projects
Commit fbc5218a authored by Nick Mathewson's avatar Nick Mathewson :game_die:
Browse files

Update tor-config README.md.

parent f17c9083
No related branches found
No related tags found
No related merge requests found
......@@ -8,7 +8,47 @@ This crate is part of
[Arti](https://gitlab.torproject.org/tpo/core/arti/), a project to
implement [Tor](https://www.torproject.org/) in Rust.
It provides low-level types for handling configuration values.
It provides types for handling configuration values,
and general machinery for configuration management.
## Configuration in Arti
The configuration for the `arti` command line program,
and other programs which embed Arti reusing the configuration machinery,
works as follows:
1. We use [`tor_config::ConfigurationSources`](ConfigurationSources)
to enumerate the various places
where configuration information needs to come from,
and configure how they are to be read.
`arti` uses [`ConfigurationSources::from_cmdline`].
2. [`ConfigurationSources::load`] actually *reads* all of these sources,
parses them (eg, as TOML files),
and returns a [`config::Config`].
This is a tree-structured dynamically typed data structure,
mirroring the input configuration structure, largely unvalidated,
and containing everything in the input config sources.
3. We call one of the [`tor_config::resolve`](resolve) family.
This maps the input configuration data to concrete `ConfigBuilder `s
for the configuration consumers within the program.
(For `arti`, that's `TorClientConfigBuilder` and `ArtiBuilder`).
This mapping is done using the `Deserialize` implementations on the `Builder`s.
`resolve` then calls the `build()` method on each of these parts of the configuration
which applies defaults and validates the resulting configuation.
It is important to call `resolve` *once* for *all* the configuration consumers,
so that it sees a unified view of which config settings in the input
were unrecognized, and therefore may need to be reported to the user.
See the example in the [`load`] module documentation.
4. The resulting configuration objects (eg, `TorClientConfig`, `ArtiConfig`)
are provided to the code that must use them (eg, to make a `TorClient`).
See the
[`tor_config::load` module-level documentation](load).
for an example.
## ⚠ Stability Warning ⚠
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment