Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How do I pass an enum variant to match on as a function parameter?

I would like to pass in the parameters what arm of the enum I need to match, something like this:

enum D {
    A(i64),
    B(u64),
    C(u64, u64),
}
let a = D.A(10);
println!(a.is_of(D.A)); // true
println!(a.is_of(D.B)); // false

I know I can use matching rules for this, but I'd like this is_of method to take as an input of the enum options for my purposes.

like image 212
asosnovsky Avatar asked Dec 23 '22 22:12

asosnovsky


1 Answers

You cannot.

  • It is not possible to pass types as function parameters.
  • Enum variants are not types to start with.

If you are OK using a macro instead of a function, see

  • How do I assert an enum is a specific variant if I don't care about its fields?
  • The matches crate

See also:

  • Compare enums only by variant, not value

  • Can traits be used on enum types?

  • Can struct-like enums be used as types?
  • Is there a way to use existing structs as enum variants?
like image 186
Shepmaster Avatar answered Dec 26 '22 01:12

Shepmaster