#![allow(dead_code, deprecated, unused_variables, unused_mut)] use std::fmt; struct Foo(i32); impl fmt::Display for Foo { fn fmt(&self, formatter: &mut fmt::Formatter<'_>) -> fmt::Result { if formatter.sign_plus() { write!( formatter, "Foo({}{})", if self.0 < 0 { '-' } else { '+' }, self.0.abs() ) } else { write!(formatter, "Foo({})", self.0) } } } fn main() { assert_eq!(format!("{:+}", Foo(23)), "Foo(+23)"); assert_eq!(format!("{:+}", Foo(- 23)), "Foo(-23)"); assert_eq!(format!("{}", Foo(23)), "Foo(23)"); }