I wish I could choose to pass a ref or the thing itself without having to write the same function several times, like this: 

```
use std::ops::Add;

#[derive(Debug)]
struct Point {
    x: i32,
    y: i32,
}

pub trait Add1<RHS=Self> {
    type Output;
    fn add1(&self, rhs: &RHS) -> Self::Output;
}

impl Add for Point {
    type Output = Point;
    fn add(self, other: Point) -> Point {
        Point { x: self.x + other.x, y: self.y + other.y }
    }
}

impl Add1 for Point {
    type Output = Point;
    fn add1(&self, other: &Point) -> Point {
        Point { x: self.x + other.x, y: self.y + other.y }
    }
}

fn main() {
    let p1 = Point { x: 1, y: 0 };
    let p2 = Point { x: 2, y: 3 };
    let p4 = p1.add1(&p2);
    let p3 = p1 + p2;
    println!("{:?}", p3);
    println!("{:?}", p4);
}

```

How can avoid this kind of redundancy?