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
}