Benjamin Lannon

Select a theme. Click on the overlay or the button again to exit

Implementing the Display trait in Rust

Posted on:

When interpolating values into a string in a println! call, you use the {} symbols in a format string followed by the variables as arguments. What this is using to insert a user-facing output into the string is the fmt::Display trait. This trait is implemented on all primitives and many other types in the standard library.

To implement it on your own structs, it requires a fmt function to be defined to show how to render the contents of a struct in a string format.

struct User {
    name: String,
    email: String,
}

impl fmt::Display for User {
    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
      write!(f, "{} <{}>", self.name, self.email)
    }
}

Now if we create an instance of our User struct, we can print it out directly as we would with other variables:

fn main() {
    let new_user = User {
        name: "Benjamin Lannon".to_string(),
        email: "email@example.com".to_string()
    }

    println!("{}", new_user); // Prints out "Benjamin Lannon <email@example.com>"
}