Types that implement Deref can behave like references at the use site.

Program

Play the program to wrap a number, dereference the wrapper, and add one.

deref_wrapper.rs
use std::ops::Deref;

struct Meter(i32);

impl Deref for Meter {
    type Target = i32;

    fn deref(&self) -> &Self::Target {
        &self.0
    }
}

fn main() {
    let base = ;
    let meter = Meter(base);
    let next = *meter + 1;
    println!("{next}");
}
use std::ops::Deref;

struct Meter(i32);

impl Deref for Meter {
    type Target = i32;

    fn deref(&self) -> &Self::Target {
        &self.0
    }
}

fn main() {
    let base = ;
    let meter = Meter(base);
    let next = *meter + 1;
    println!("{next}");
}
use std::ops::Deref;

struct Meter(i32);

impl Deref for Meter {
    type Target = i32;

    fn deref(&self) -> &Self::Target {
        &self.0
    }
}

fn main() {
    let base = ;
    let meter = Meter(base);
    let next = *meter + 1;
    println!("{next}");
}
Deref `Deref` tells Rust how to reach the wrapped target value.
associated type `type Target = i32` declares what dereferencing produces.
operator `*meter` calls the dereference behavior and reads the inner integer.