| 26 | } |
| 27 | |
| 28 | fn main() { |
| 29 | // Specifies `one_foot` to have phantom type parameter `Inch`. |
| 30 | let one_foot: Length<Inch> = Length(12.0, PhantomData); |
| 31 | // `one_meter` has phantom type parameter `Mm`. |
| 32 | let one_meter: Length<Mm> = Length(1000.0, PhantomData); |
| 33 | |
| 34 | // `+` calls the `add()` method we implemented for `Length<Unit>`. |
| 35 | // |
| 36 | // Since `Length` implements `Copy`, `add()` does not consume |
| 37 | // `one_foot` and `one_meter` but copies them into `self` and `rhs`. |
| 38 | let two_feet = one_foot + one_foot; |
| 39 | let two_meters = one_meter + one_meter; |
| 40 | |
| 41 | // Addition works. |
| 42 | println!("one foot + one_foot = {:?} in", two_feet.0); |
| 43 | println!("one meter + one_meter = {:?} mm", two_meters.0); |
| 44 | } |