Can you disable constructor syntax for a type?

Viewed 2641

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.)

1 Answers
Related