Rust Cheatsheet
Display Trait
Wie lassen sich Structs als String darstellen?
- Python
def __str__() - Java
public String toString() - Rust
trait 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.