library/
overload.rs

1//!
2//! # Overload
3//! overload crate description:
4//! overload the `+` operator
5//!
6
7use std::ops::Add;
8
9pub struct MilliMeter(pub u32);
10struct Meter(u32);
11
12impl Add<Meter> for MilliMeter {
13    type Output = MilliMeter;
14    fn add(self, rhs: Meter) -> Self::Output {
15        MilliMeter(self.0 + rhs.0 * 1000)
16    }
17}
18
19/// MilliMeter + MilliMeter = MilliMeter
20///
21/// # Example
22/// ```
23/// use library::overload::MilliMeter;
24///
25/// let a = MilliMeter(1);
26/// let b = MilliMeter(2);
27/// let c = a + b;
28/// assert_eq!(c.0, 3);
29/// ```
30///
31impl Add for MilliMeter {
32    type Output = MilliMeter;
33    fn add(self, rhs: Self) -> Self::Output {
34        MilliMeter(self.0 + rhs.0)
35    }
36}
37
38#[cfg(test)]
39mod test {
40    use super::*;
41
42    #[test]
43    fn add() {
44        let milli1 = MilliMeter(1);
45        let milli2 = MilliMeter(2);
46        let meter = Meter(1);
47        assert_eq!((milli1 + milli2).0, 3);
48        assert_eq!((MilliMeter(1) + meter).0, 1001);
49    }
50}