Implementation

The impl, implementation block, allows attaching functions to structures.

I’ve written about structures, here.

The Point

For my example code, I’ll have a simple 2 dimentional Point.

1
2
3
4
struct Point {
    X: i64,
    Y: i64,
}

Adding functionality

Now to add some functions to the Point.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
impl Point {
    fn add(&mut self, v i64) -> *Point {
        self.X += v;
        self.Y += v;
        self
    }
    fn equal(&self, o *Point) -> bool {
        self.X == o.X && self.Y == o.Y
    }
}

These add 2 functions that will be appart of the Point structure.

This means all Point structure instances will have add and equal functions.

Using this functionality

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
fn main() {
    let p1 = Point{X: 2, Y: 0};
    p1.add(3);
    println!("({}, {})", p1.X, p1.Y);
    if p1.equal(&Point{X: 5, Y: 3}) {
        println!("(5, 3) = true");
    } else {
        println!("(5, 3) != ({}, {})", p1.X, p1.Y);
    }
}