Structs, Enums and Traits

Rust Generics

Write a function or struct once and use it with many types, with no cost at run time.

  • Intermediate
  • 3 min read
  • 1 runnable example
What you'll learn
  • Type parameters
  • Trait bounds
  • Generic structs
largest<T>
largest(&[3, 9, 4])9
largest(&[2.5, 1.5])2.5
largest(&['x', 'b'])'x'

One definition, many types

Generics let you write code once and use it with different types. A type parameter such as T stands for a type that is chosen where the code is used.

T: PartialOrd + Copy is a trait bound: largest accepts any type that can be compared and copied, so it works with integers, floats and characters. Pair<T> is a generic struct, and its impl block is generic too. The compiler creates a separate version for each type, so generics cost nothing at run time.

Key points

  1. T stands for a type chosen at the call.
  2. T: PartialOrd limits T to comparable types.
  3. The compiler makes a version per type.

Runnable Rust example

Rust
Run code →
main.rs
fn largest<T: PartialOrd + Copy>(items: &[T]) -> T {
    let mut largest = items[0];
    for &item in items {
        if item > largest {
            largest = item;
        }
    }
    largest
}

#[derive(Debug)]
struct Pair<T> {
    left: T,
    right: T,
}

impl<T: Copy> Pair<T> {
    fn swap(&self) -> Pair<T> {
        Pair { left: self.right, right: self.left }
    }
}

fn main() {
    println!("{}", largest(&[3, 9, 4]));
    println!("{}", largest(&[2.5, 1.5]));
    println!("{}", largest(&['x', 'b']));

    let pair = Pair { left: "a", right: "b" };
    println!("{:?}", pair.swap());
}
Get a Run button for this example Result of running the code
9
2.5
x
Pair { left: "b", right: "a" }

Practice

Open the example in the online compiler, change a value or add a line, and predict the output before you run it. Then break the code on purpose and read the compiler's message.

Finished this lesson?

Mark it as learned to track your progress.

Practice with a challenge

Use what this lesson covers to solve a real problem. Each challenge runs in your browser with instant tests and an AI review.

All challenges