Ensure that every section-level config type has a builder() function.

This commit is contained in:
Nick Mathewson 2021-11-20 21:00:20 -05:00
parent 0372d24eed
commit aa83a5e38a
5 changed files with 44 additions and 2 deletions

1
Cargo.lock generated
View File

@ -123,6 +123,7 @@ version = "0.0.1"
dependencies = [
"arti-client",
"config",
"derive_builder",
"once_cell",
"regex",
"serde",

View File

@ -53,6 +53,13 @@ impl Default for ClientAddrConfig {
}
}
impl ClientAddrConfig {
/// Return a new [`ClientAddrConfigBuilder`].
pub fn builder() -> ClientAddrConfigBuilder {
ClientAddrConfigBuilder::default()
}
}
/// Configuration for where information should be stored on disk.
///
/// This section is for read/write storage.

View File

@ -19,6 +19,7 @@ serde = { version = "1.0.124", features = ["derive"] }
toml = "0.5.8"
regex = { version = "1.5.3", default-features = false, features = ["std"] }
thiserror = "1.0.24"
derive_builder = "0.10.2"
[dev-dependencies]
tempfile = "3.2.0"

View File

@ -4,6 +4,7 @@ use arti_client::config::{
dir::{DownloadScheduleConfig, NetworkConfig},
StorageConfig, TorClientConfig,
};
use derive_builder::Builder;
use serde::Deserialize;
use std::collections::HashMap;
use tor_config::ConfigBuildError;
@ -12,9 +13,10 @@ use tor_config::ConfigBuildError;
pub(crate) const ARTI_DEFAULTS: &str = concat!(include_str!("./arti_defaults.toml"),);
/// Structure to hold our logging configuration options
#[derive(Deserialize, Debug, Clone)]
#[derive(Deserialize, Debug, Clone, Builder)]
#[serde(deny_unknown_fields)]
#[non_exhaustive] // TODO(nickm) remove public elements when I revise this.
#[builder(build_fn(error = "ConfigBuildError"))]
pub struct LoggingConfig {
/// Filtering directives that determine tracing levels as described at
/// <https://docs.rs/tracing-subscriber/0.2.20/tracing_subscriber/filter/struct.EnvFilter.html>
@ -30,9 +32,17 @@ pub struct LoggingConfig {
pub journald: bool,
}
impl LoggingConfig {
/// Return a new LoggingConfigBuilder
pub fn builder() -> LoggingConfigBuilder {
LoggingConfigBuilder::default()
}
}
/// Configuration for one or more proxy listeners.
#[derive(Deserialize, Debug, Clone)]
#[derive(Deserialize, Debug, Clone, Builder)]
#[serde(deny_unknown_fields)]
#[builder(build_fn(error = "ConfigBuildError"))]
pub struct ProxyConfig {
/// Port to listen on (at localhost) for incoming SOCKS
/// connections.
@ -40,6 +50,11 @@ pub struct ProxyConfig {
}
impl ProxyConfig {
/// Return a new [`ProxyConfigBuilder`].
pub fn builder() -> ProxyConfigBuilder {
ProxyConfigBuilder::default()
}
/// Return the configured SOCKS port for this proxy configuration,
/// if one is enabled.
pub fn socks_port(&self) -> Option<u16> {

View File

@ -45,6 +45,10 @@ fn ipv6_prefix_default() -> u8 {
}
impl PathConfig {
/// Return a new [`PathConfigBuilder`].
pub fn builder(&self) -> PathConfigBuilder {
PathConfigBuilder::default()
}
/// Return a subnet configuration based on these rules.
pub fn subnet_config(&self) -> tor_netdir::SubnetConfig {
tor_netdir::SubnetConfig::new(
@ -106,6 +110,13 @@ impl Default for CircuitTiming {
}
}
impl CircuitTiming {
/// Return a new [`CircuitTimingBuilder`]
pub fn builder() -> CircuitTimingBuilder {
CircuitTimingBuilder::default()
}
}
/// Configuration for a circuit manager.
///
/// This configuration includes information about how to build paths
@ -128,3 +139,10 @@ pub struct CircMgrConfig {
#[builder(default)]
pub(crate) circuit_timing: CircuitTiming,
}
impl CircMgrConfig {
/// Return a new [CircMgrConfigBuiler`].
pub fn builder() -> CircMgrConfigBuilder {
CircMgrConfigBuilder::default()
}
}