Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Is there a way to use existing structs as enum variants?

Tags:

rust

I'm using an enum for polymorphism, similar to the following:

enum MyType {
    Variant1 { a: i32, b: i32 },
    Variant2 { a: bool, b: bool },
}

Is there clean way to use existing structs for Variant1 and Variant2? I've done the following:

struct Variant1 {
    a: i32,
    b: i32,
}

struct Variant2 {
    a: bool,
    b: bool,
}

enum MyType {
    Variant1(Variant1),
    Variant2(Variant2),
}

but it feels pretty clunky. I was wondering if there's a better way to accomplish a similar thing.

like image 926
anderspitman Avatar asked Apr 07 '18 07:04

anderspitman


People also ask

What is enum variant?

The enum keyword allows the creation of a type which may be one of a few different variants. Any variant which is valid as a struct is also valid as an enum .

Can enums have methods rust?

In Rust, methods cannot only be defined on structs, they can also be defined on tuples and enums, and even on built-in types like integers.


1 Answers

There have been multiple RFCs about making enum variants their own type:

  • RFC 1450: Types for enum variants
  • RFC 2593: Enum variant types

Unfortunately, they have been postponed or not yet decided on as this is not considered a language priority.

This means that right now, the way you have proposed is the only way to have types for enum variants.

like image 68
mcarton Avatar answered Sep 18 '22 06:09

mcarton