Display in std::fmt - Rust (original) (raw)
Trait Display
1.0.0 · Source
pub trait Display {
// Required method
fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>;
}
Expand description
Format trait for an empty format, {}
.
Implementing this trait for a type will automatically implement theToString trait for the type, allowing the usage of the .to_string() method. Prefer implementing the Display
trait for a type, rather than ToString.
Display
is similar to Debug, but Display
is for user-facing output, and so cannot be derived.
For more information on formatters, see the module-level documentation.
§Internationalization
Because a type can only have one Display
implementation, it is often preferable to only implement Display
when there is a single most “obvious” way that values can be formatted as text. This could mean formatting according to the “invariant” culture and “undefined” locale, or it could mean that the type display is designed for a specific culture/locale, such as developer logs.
If not all values have a justifiably canonical textual format or if you want to support alternative formats not covered by the standard set of possibleformatting traits, the most flexible approach is display adapters: methods like str::escape_default or Path::display which create a wrapper implementing Display
to output the specific display format.
§Examples
Implementing Display
on a type:
use std::fmt;
struct Point {
x: i32,
y: i32,
}
impl fmt::Display for Point {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
write!(f, "({}, {})", self.x, self.y)
}
}
let origin = Point { x: 0, y: 0 };
assert_eq!(format!("The origin is: {origin}"), "The origin is: (0, 0)");
1.0.0 · Source
Formats the value using the given formatter.
§Errors
This function should return Err if, and only if, the provided Formatter returns Err. String formatting is considered an infallible operation; this function only returns a Result because writing to the underlying stream might fail and it must provide a way to propagate the fact that an error has occurred back up the stack.
§Examples
use std::fmt;
struct Position {
longitude: f32,
latitude: f32,
}
impl fmt::Display for Position {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
write!(f, "({}, {})", self.longitude, self.latitude)
}
}
assert_eq!(
"(1.987, 2.983)",
format!("{}", Position { longitude: 1.987, latitude: 2.983, }),
);