Rust

Custom Display + Debug Implementation

admin by @admin ADMIN
Jun 17, 2026
May 31, 2026
Public
0 0 up · 0 down Sign in to vote
`Debug` (for `{:?}`) is usually derived. `Display` (for `{}`) is hand-written and goes through the same `std::fmt::Formatter` API.
Rust
Raw
use std::fmt;

#[derive(Debug)]
struct Money {
    cents: u64,
    currency: &'static str,
}

impl fmt::Display for Money {
    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
        let dollars = self.cents / 100;
        let cents   = self.cents % 100;
        write!(f, "{}{}.{:02}", self.currency, dollars, cents)
    }
}

fn main() {
    let price = Money { cents: 4_99, currency: "$" };
    println!("{price}");      // $4.99    (uses Display)
    println!("{price:?}");    // Money { cents: 499, currency: "$" }   (Debug)
    println!("{price:#?}");   // Same, pretty-printed
}
Tags

Save your own code snippets

Create a free account and build your private vault. Share publicly whenever you want.