Rust Traits
Defining shared behavior with traits
Trait Definition
trait Summary { # define trait
fn summarize(&self) -> String; # method signature
}
Implementing Traits
struct Article {
title: String,
content: String,
}
impl Summary for Article { # implement trait
fn summarize(&self) -> String {
format!("{}"{}, self.title, self.content)
}
}
Default Implementation
trait Summary {
fn summarize(&self) -> String { # default method
String::from("(Read more...)")
}
}
Trait Bounds
fn notify<T: Summary>(item: &T) { # generic with trait bound
println!("{}"{}, item.summarize());
}
fn notify(item: &impl Summary) { # alternative syntax
println!("{}"{}, item.summarize());
}
Multiple Trait Bounds
fn notify<T: Summary + Display>(item: &T) { # multiple traits
// item must implement both
}
fn notify<T>(item: &T)
where T: Summary + Display { # where clause
// cleaner syntax
}