Say I define my own type in a Rust library, like so:
struct Date {
year: u16,
month: u8,
day: u8
}
impl Date {
fn new(y: u16, m: u8, d: u8) -> Date {
// Do some validation here first
Date { year: y, month: m, day: d }
}
}
Is there a way to require users to use the Date::new
constructor? In other words, can I somehow prohibit users from creating their own Date
struct using the following constructor:
let d = Date { 2017, 7, 10 };
I ask because it seems to be a detrimental flaw if you cannot force developers to run their arguments through a battery of validation before setting the members of a struct. (Although, maybe there is some other pattern that I should use in Rust, like validating data when they are used rather than when they are created; feel free to comment on that.)
See Question&Answers more detail:
os 与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…