Rename impl_standard_builder from impl_default_via_builder

I have Plans for this macro.  In particular:

 * I have a wip branch which tests that the Builder can be
   deserialised from an empty config (ie, that config reading
   of a config with a blank section for this item works).

 * I think we should autogenerate $Config::builder(),
   and promote that, rather than $ConfigBuilder::default().
   This macro could do that.
This commit is contained in:
Ian Jackson 2022-05-12 15:58:58 +01:00
parent 888d6e0511
commit c1c6f2b376
6 changed files with 26 additions and 21 deletions

View File

@ -18,7 +18,7 @@ use std::collections::HashMap;
use std::path::Path;
use std::path::PathBuf;
use std::time::Duration;
pub use tor_config::impl_default_via_builder;
pub use tor_config::impl_standard_builder;
pub use tor_config::{CfgPath, CfgPathError, ConfigBuildError, Reconfigure};
/// Types for configuring how Tor circuits are built.
@ -57,7 +57,7 @@ pub struct ClientAddrConfig {
#[builder(default)]
pub(crate) allow_local_addrs: bool,
}
impl_default_via_builder! { ClientAddrConfig }
impl_standard_builder! { ClientAddrConfig }
/// Configuration for client behavior relating to stream connection timeouts
///
@ -89,7 +89,7 @@ pub struct StreamTimeoutConfig {
#[builder_field_attr(serde(default, with = "humantime_serde::option"))]
pub(crate) resolve_ptr_timeout: Duration,
}
impl_default_via_builder! { StreamTimeoutConfig }
impl_standard_builder! { StreamTimeoutConfig }
impl ClientAddrConfig {
/// Return a new [`ClientAddrConfigBuilder`].
@ -146,7 +146,7 @@ pub struct StorageConfig {
#[builder(setter(into), default = "default_state_dir()")]
state_dir: CfgPath,
}
impl_default_via_builder! { StorageConfig }
impl_standard_builder! { StorageConfig }
/// Return the default cache directory.
fn default_cache_dir() -> CfgPath {
@ -269,7 +269,7 @@ pub struct TorClientConfig {
#[builder_field_attr(serde(default))]
pub(crate) stream_timeouts: StreamTimeoutConfig,
}
impl_default_via_builder! { TorClientConfig }
impl_standard_builder! { TorClientConfig }
/// Helper to convert convert_override_net_params
fn convert_override_net_params(

View File

@ -7,7 +7,7 @@ use serde::{Deserialize, Serialize};
use arti_client::config::TorClientConfigBuilder;
use arti_client::TorClientConfig;
use tor_config::{impl_default_via_builder, ConfigBuildError};
use tor_config::{impl_standard_builder, ConfigBuildError};
use crate::{LoggingConfig, LoggingConfigBuilder};
@ -26,7 +26,7 @@ pub struct ApplicationConfig {
#[builder(default)]
pub(crate) watch_configuration: bool,
}
impl_default_via_builder! { ApplicationConfig }
impl_standard_builder! { ApplicationConfig }
/// Configuration for one or more proxy listeners.
#[derive(Deserialize, Debug, Clone, Builder, Eq, PartialEq)]
@ -44,7 +44,7 @@ pub struct ProxyConfig {
#[builder(default)]
pub(crate) dns_port: Option<u16>,
}
impl_default_via_builder! { ProxyConfig }
impl_standard_builder! { ProxyConfig }
/// Return the default value for `socks_port`
#[allow(clippy::unnecessary_wraps)]
@ -71,7 +71,7 @@ pub struct SystemConfig {
#[builder(setter(into), default = "default_max_files()")]
pub(crate) max_files: u64,
}
impl_default_via_builder! { SystemConfig }
impl_standard_builder! { SystemConfig }
/// Return the default maximum number of file descriptors to launch with.
fn default_max_files() -> u64 {
@ -128,7 +128,7 @@ pub struct ArtiConfig {
#[builder_field_attr(serde(flatten))]
tor: TorClientConfig,
}
impl_default_via_builder! { ArtiConfig }
impl_standard_builder! { ArtiConfig }
impl TryFrom<config::Config> for ArtiConfig {
type Error = config::ConfigError;

View File

@ -5,7 +5,7 @@ use derive_builder::Builder;
use serde::{Deserialize, Serialize};
use std::path::Path;
use std::str::FromStr;
use tor_config::impl_default_via_builder;
use tor_config::impl_standard_builder;
use tor_config::{define_list_builder_accessors, define_list_builder_helper};
use tor_config::{CfgPath, ConfigBuildError};
use tracing::{warn, Subscriber};
@ -52,7 +52,7 @@ pub struct LoggingConfig {
#[builder(default)]
log_sensitive_information: bool,
}
impl_default_via_builder! { LoggingConfig }
impl_standard_builder! { LoggingConfig }
/// Return a default tracing filter value for `logging.console`.
#[allow(clippy::unnecessary_wraps)]

View File

@ -5,7 +5,7 @@
//! Most types in this module are re-exported by `arti-client`.
use tor_basic_utils::define_accessor_trait;
use tor_config::impl_default_via_builder;
use tor_config::impl_standard_builder;
use tor_config::{define_list_builder_accessors, define_list_builder_helper, ConfigBuildError};
use tor_guardmgr::fallback::FallbackList;
@ -41,7 +41,7 @@ pub struct PathConfig {
#[builder(default = "ipv6_prefix_default()")]
ipv6_subnet_family_prefix: u8,
}
impl_default_via_builder! { PathConfig }
impl_standard_builder! { PathConfig }
/// Default value for ipv4_subnet_family_prefix.
fn ipv4_prefix_default() -> u8 {
@ -119,7 +119,7 @@ pub struct PreemptiveCircuitConfig {
#[builder(default = "default_preemptive_min_exit_circs_for_port()")]
pub(crate) min_exit_circs_for_port: usize,
}
impl_default_via_builder! { PreemptiveCircuitConfig }
impl_standard_builder! { PreemptiveCircuitConfig }
/// Configuration for circuit timeouts, expiration, and so on.
///
@ -161,7 +161,7 @@ pub struct CircuitTiming {
#[builder_field_attr(serde(default, with = "humantime_serde::option"))]
pub(crate) request_loyalty: Duration,
}
impl_default_via_builder! { CircuitTiming }
impl_standard_builder! { CircuitTiming }
/// Return default threshold
fn default_preemptive_threshold() -> usize {

View File

@ -92,16 +92,21 @@ impl Reconfigure {
}
}
/// Defines `Default` for a struct with a `Builder`. Use this, not `derive`.
/// Defines standard impls for a struct with a `Builder`, incl `Default`
///
/// Use this. Do not `#[derive(Builder, Default)]`. That latter approach would produce
/// Generates:
///
/// * `impl Default for $Config`
/// * a self-test that this actually works
///
/// **Use this.** Do not `#[derive(Builder, Default)]`. That latter approach would produce
/// wrong answers if builder attributes are used to specify non-`Default` default values.
///
/// `$Config`'s builder must have default values for all the fields,
/// or this macro-generated self-test will fail.
/// This should be OK for all elements of our configuration.
#[macro_export]
macro_rules! impl_default_via_builder { {
macro_rules! impl_standard_builder { {
$Config:ty
} => {
$crate::paste!{

View File

@ -141,7 +141,7 @@ use std::time::{Duration, Instant, SystemTime};
use tor_proto::ClockSkew;
use tracing::{debug, info, trace, warn};
use tor_config::impl_default_via_builder;
use tor_config::impl_standard_builder;
use tor_config::{define_list_builder_accessors, define_list_builder_helper};
use tor_llcrypto::pk;
use tor_netdir::{params::NetParameters, NetDir, Relay};
@ -1234,7 +1234,7 @@ pub struct GuardUsage {
restrictions: GuardRestrictionList,
}
impl_default_via_builder! { GuardUsage }
impl_standard_builder! { GuardUsage }
/// List of socket restricteionesses, as configured
pub type GuardRestrictionList = Vec<GuardRestriction>;