Generic Types and Enums with Associated Values
If you are not familiar with Generic Types and/or Enums with associated values, here is an example of some rust that leverages both.
struct Person<T> {
name: String,
associates: T,
}
enum Associate {
Person(String),
Pet(String, u32),
}
fn main() {
let person_a = Person {
name: "Aye",
associates: "Steve".to_string(),
};
let person_b = Person {
name: "Bea",
associates: vec![
Associate::Person("James".into()),
Associate::Person("Helen".into()),
Associate::Person("Edwardo".into()),
Associate::Person("Maya".into()),
Associate::Pet("Fido".into(), 4),
]
};
}
First we have the definition of Person
, this struct
will have two fields, their name and their associates. In the definition we have included <T>
which is a standard way to say that something about a type is customizable. We set the type of name to String
and the type of associates to T
, this would allow anyone who constructed a Person
to say what the type of associates is going to be. So if you wanted the associate field to just be a string because that person has 1 friend, you could do that or you could set the field to be a list of strings if they had more friends.
Next we have the Associate
enum, like a standard C
style enum we list the cases that this type can be. In addition, we can then associate some data with each case. So the Associate::Person
can hold onto a string, presumably the name of that person and the Associate::Pet
can hold onto a string and an integer, the name and number of legs.
inside the main function we have defined 2 people, person_a
has a name and their associate is just 1 name while person_b
’s associates are a list of 4 Associate::Person
and 1 Associate::Pet
.