Zum Inhalt springen

Rust Cheatsheet

Display Trait

Wie lassen sich Structs als String darstellen?

  • Python def __str__()
  • Java public String toString()
  • Rusttrait Display
use std::fmt::Display;
struct ID(u32);
impl Display for ID {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
write!(f, "ID({})", self.0)
}
}
#[test]
fn test_display() {
let id = ID(123);
let s = format!("{id}");
assert_eq!(s, "ID(123)");
assert_eq!(id.to_string(), "ID(123)");
}
From Trait

Wie lassen sich Typen value-to-value konvertieren?

  • Java constructor overloading
  • Rust trait From
use std::
struct ID(u32);
impl From<u16> for ID {
fn from(value: u16) -> Self {
Self(value as u32)
}
}
#[test]
fn test_from() {
let id = ID::from(123);
assert_eq!(id.0, ID(123).0);
let id: ID = 123.into();
assert_eq!(id.0, ID(123).0);
}

From implementiert auch den Into-Trait mit, dieser ermoeglicht den .into()-Call From darf nicht fehlschlagen, dafuer existiert der TryFrom-Trait, z. B. kann man diesen gut fuer Konvertierung von Strings in eigene Typen verwenden, um bei Fehlerhaften Strings ein Result zurueck zu geben.

Docs