Most of the operators and the special syntax of Rust are backed up by traits, which tell the compiler how to perform the operation on the specific data type it's looking at. We've seen some of those already, but many of them can't be derived, so if we want to enable that syntax for our data types, we need to implement them manually.
Traits that enable operators
Add, Mul, Sub, and Div
The Add, Mul, Sub, and Div traits represent the ability to add, multiply, subtract, or divide two values. These traits are used by the compiler to implement the +, *, -, and / operators.
Notice that if the values of self and other do not have the Copy trait, they are moved into the implementation function and consumed.
...