I have some basic struct to modeling an item's unit, eg: pcs, box, dozen, etc.
But I need to make some fields mandatory to be defined by user and some are not. Here's my implementation with default constructor from Rust's documentation. My problem is that Rust forced all of the field to be defined in the constructor:
pub struct Unit {
pub name: String, // this is mandatory. MUST be filled
pub multiplier: f64, // this is mandatory. MUST be filled
pub price_1: Option<f64>, // this is non-mandatory with default value NONE
pub price_2: Option<f64>, // this is non-mandatory with default value NONE
pub price_3: Option<f64>, // this is non-mandatory with default value NONE
}
// here I implement the Default just for the prices.
// If user doesn't fill the name and multiplier field, it will throws an error
// the problem is that Rust forced all of the field to be defined in the constructor
impl Default for Unit {
fn default() -> Unit {
Unit {
price_1: None,
price_2: None,
price_3: None,
}
}
}
let u = Unit {
name: String::from("DOZEN"), // user must fill the name field
multiplier: 20.0, // also the multiplier field
price_1: Some(25600.0), // this is optional, user doesn't have to define this
..Default::default() // call the default function here to populate the rest
}