Generic Enums in Rust 🎯

beginner
14 min

Generic Enums in Rust 🎯

Welcome to our deep dive into Generic Enums in Rust! This lesson is designed for beginners and intermediates, so let's get started without any pre-requisites. 📝

What are Enums?

In Rust, an Enum (Enumeration) is a type that represents a set of values. Each value is called a variant. Enums help in organizing related data under a single type, making your code cleaner and more maintainable.

Introducing Generic Enums 💡

Generic Enums (also known as parametrized enums) allow us to create enums that accept types as parameters. This provides more flexibility and reusability in our code.

Creating a Generic Enum 📝

Let's create a simple Generic Enum that represents different shapes with their areas.

rust
enum Shape<T> where T: std::ops::Mul<Output = f64> { Circle(f64, f64), Rectangle(f64, f64), }

Here, Shape<T> is our Generic Enum, and T is a type parameter that accepts any type that can multiply to give a f64. We've defined two variants, Circle and Rectangle.

Using the Generic Enum 📝

Now, let's create instances of our Shape Generic Enum and calculate their areas.

rust
fn main() { let circle = Shape::Circle(5.0, 3.14); let rectangle = Shape::Rectangle(4.0, 5.0); match circle { Shape::Circle(r, _) => println!("Circle area: {}", r * r * 3.14), Shape::Rectangle(_, _) => panic!("This is not a circle."), } match rectangle { Shape::Circle(_, _) => panic!("This is not a rectangle."), Shape::Rectangle(length, width) => println!("Rectangle area: {}", length * width), } }

In this example, we've instantiated circle as a circle with radius 5 and rectangle as a rectangle with dimensions 4 and 5. We use a match statement to calculate the area of each shape.

💡 Pro Tip:

You can change the type of T in the Shape Generic Enum to better suit your needs. For example, if you want to represent 3D shapes, you could change T to a tuple type like (f64, f64, f64).

Quiz Time 🎯

Question: What is the purpose of the type parameter T in the Shape Generic Enum?

A: To define the area of a circle B: To define the area of a rectangle C: To accept any type that can multiply to give a f64

Correct: C Explanation: The type parameter T in the Shape Generic Enum accepts any type that can multiply to give a f64, making it flexible and reusable.


That's it for our introduction to Generic Enums in Rust! As you continue to practice, you'll find these versatile data structures incredibly useful in your projects. Happy coding! 🌟