Loading crates/arti-client/src/config.rs +5 −27 Original line number Diff line number Diff line Loading @@ -18,6 +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::{CfgPath, CfgPathError, ConfigBuildError, Reconfigure}; /// Types for configuring how Tor circuits are built. Loading Loading @@ -88,15 +89,7 @@ pub struct StreamTimeoutConfig { pub(crate) resolve_ptr_timeout: Duration, } // NOTE: it seems that `unwrap` may be safe because of builder defaults // check `derive_builder` documentation for details // https://docs.rs/derive_builder/0.10.2/derive_builder/#default-values #[allow(clippy::unwrap_used)] impl Default for ClientAddrConfig { fn default() -> Self { ClientAddrConfigBuilder::default().build().unwrap() } } impl_default_via_builder! { ClientAddrConfig } impl ClientAddrConfig { /// Return a new [`ClientAddrConfigBuilder`]. Loading @@ -105,12 +98,7 @@ impl ClientAddrConfig { } } #[allow(clippy::unwrap_used)] impl Default for StreamTimeoutConfig { fn default() -> Self { StreamTimeoutConfigBuilder::default().build().unwrap() } } impl_default_via_builder! { StreamTimeoutConfig } impl StreamTimeoutConfig { /// Return a new [`StreamTimeoutConfigBuilder`]. Loading Loading @@ -171,11 +159,7 @@ fn default_state_dir() -> CfgPath { CfgPath::new("${ARTI_LOCAL_DATA}".to_owned()) } impl Default for StorageConfig { fn default() -> Self { Self::builder().build().expect("Default builder failed") } } impl_default_via_builder! { StorageConfig } impl StorageConfig { /// Return a new StorageConfigBuilder. Loading Loading @@ -308,13 +292,7 @@ impl AsRef<tor_guardmgr::fallback::FallbackList> for TorClientConfig { } } impl Default for TorClientConfig { fn default() -> Self { Self::builder() .build() .expect("Could not build TorClientConfig from default configuration.") } } impl_default_via_builder! { TorClientConfig } impl TorClientConfig { /// Return a new TorClientConfigBuilder. Loading crates/tor-config/src/lib.rs +25 −0 Original line number Diff line number Diff line Loading @@ -90,6 +90,31 @@ impl Reconfigure { } } /// Defines `Default` for a struct with a `Builder`. Use this, not `derive`. /// /// 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 { { $Config:ty } => { $crate::paste!{ impl Default for $Config { fn default() -> Self { // unwrap is good because the test case above checks that it works! [< $Config Builder >]::default().build().unwrap() } } #[test] fn [< test_impl_Default_for_ $Config >] () { let _ = $Config::default(); } } } } #[cfg(test)] mod test { use super::*; Loading Loading
crates/arti-client/src/config.rs +5 −27 Original line number Diff line number Diff line Loading @@ -18,6 +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::{CfgPath, CfgPathError, ConfigBuildError, Reconfigure}; /// Types for configuring how Tor circuits are built. Loading Loading @@ -88,15 +89,7 @@ pub struct StreamTimeoutConfig { pub(crate) resolve_ptr_timeout: Duration, } // NOTE: it seems that `unwrap` may be safe because of builder defaults // check `derive_builder` documentation for details // https://docs.rs/derive_builder/0.10.2/derive_builder/#default-values #[allow(clippy::unwrap_used)] impl Default for ClientAddrConfig { fn default() -> Self { ClientAddrConfigBuilder::default().build().unwrap() } } impl_default_via_builder! { ClientAddrConfig } impl ClientAddrConfig { /// Return a new [`ClientAddrConfigBuilder`]. Loading @@ -105,12 +98,7 @@ impl ClientAddrConfig { } } #[allow(clippy::unwrap_used)] impl Default for StreamTimeoutConfig { fn default() -> Self { StreamTimeoutConfigBuilder::default().build().unwrap() } } impl_default_via_builder! { StreamTimeoutConfig } impl StreamTimeoutConfig { /// Return a new [`StreamTimeoutConfigBuilder`]. Loading Loading @@ -171,11 +159,7 @@ fn default_state_dir() -> CfgPath { CfgPath::new("${ARTI_LOCAL_DATA}".to_owned()) } impl Default for StorageConfig { fn default() -> Self { Self::builder().build().expect("Default builder failed") } } impl_default_via_builder! { StorageConfig } impl StorageConfig { /// Return a new StorageConfigBuilder. Loading Loading @@ -308,13 +292,7 @@ impl AsRef<tor_guardmgr::fallback::FallbackList> for TorClientConfig { } } impl Default for TorClientConfig { fn default() -> Self { Self::builder() .build() .expect("Could not build TorClientConfig from default configuration.") } } impl_default_via_builder! { TorClientConfig } impl TorClientConfig { /// Return a new TorClientConfigBuilder. Loading
crates/tor-config/src/lib.rs +25 −0 Original line number Diff line number Diff line Loading @@ -90,6 +90,31 @@ impl Reconfigure { } } /// Defines `Default` for a struct with a `Builder`. Use this, not `derive`. /// /// 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 { { $Config:ty } => { $crate::paste!{ impl Default for $Config { fn default() -> Self { // unwrap is good because the test case above checks that it works! [< $Config Builder >]::default().build().unwrap() } } #[test] fn [< test_impl_Default_for_ $Config >] () { let _ = $Config::default(); } } } } #[cfg(test)] mod test { use super::*; Loading