How to map a parametrized enum from a generic type to another?

后端 未结 4 502

If I have a type like MyEnum, how can I map it in cases where not every variant is parameterized?

For example, I\'d like to convert from

4条回答
  •  我在风中等你
    2020-12-10 05:25

    Some languages (like C++), use Duck Typing: if it quacks like a duck, it must be a duck, and therefore names matter. Rust does not.

    In Rust, names are just some display utility for us mere humans, the B in MyEnum and MyEnum may happen to have the same visual representation, but they are completely different syntactic entities as far as the language is concerned.


    There are multiple ways to alleviate your pain, though:

    • a code generation plugin or build.rs script can be used as well
    • a macro can be used to automate the mapping
    • a manual mapping can be done, it's a one shot effort after all
    • the code can be restructured to separate type-dependent from type-independent variants

    I'll show-case the latter:

    enum MyEnumImpl {
        A,
        B,
        C,
    }
    
    enum MyEnum {
        Independent(MyEnumImpl),
        Dependent(T),
    }
    

    Obviously, the latter makes it much easier to manually map things.

提交回复
热议问题