New Type Idiom

The newtype idiom gives compile time guarantees that the right type of value is supplied to a program.

For example, an age verification function that checks age in years, must be given a value of type Years.

```rust, editable struct Years(i64);

struct Days(i64);

impl Years { pub fn to_days(&self) -> Days { Days(self.0 * 365) } }

impl Days { /// truncates partial years pub fn to_years(&self) -> Years { Years(self.0 / 365) } }

fn old_enough(age: &Years) -> bool { age.0 >= 18 }

fn main() { let age = Years(5); let age_days = age.to_days(); println!(“Old enough {}”, old_enough(&age)); println!(“Old enough {}”, old_enough(&age_days.to_years())); // println!(“Old enough {}”, old_enough(&age_days)); } ```

Uncomment the last print statement to observe that the type supplied must be Years.

See also:

structs