9.4 Default Values and the Default
Trait
Often, it’s useful to create a struct instance with default values. Rust provides the Default
trait for this.
9.4.1 Deriving Default
If all fields in a struct themselves implement Default
, you can derive Default
for your struct.
#[derive(Default, Debug)] struct AppConfig { server_address: String, // Default is "" port: u16, // Default is 0 timeout_ms: u32, // Default is 0 } fn main() { let config: AppConfig = Default::default(); // Or let config = AppConfig::default(); println!("Default config: {:?}", config); // Output: AppConfig { server_address: "", port: 0, timeout_ms: 0 } // Combine with struct update syntax let custom_config = AppConfig { port: 8080, ..Default::default() // Use defaults for other fields }; println!("Custom config: {:?}", custom_config); // Output: AppConfig { server_address: "", port: 8080, timeout_ms: 0 } }
9.4.2 Implementing Default
Manually
If deriving isn’t suitable, implement Default
manually.
struct ConnectionSettings { retries: u8, use_tls: bool, } impl Default for ConnectionSettings { fn default() -> Self { ConnectionSettings { retries: 3, // Custom default use_tls: true, // Custom default } } } fn main() { let settings = ConnectionSettings::default(); println!("Default retries: {}", settings.retries); // 3 }