use enum_dispatch::enum_dispatch; use std::convert::TryInto; #[enum_dispatch] trait TestTrait { fn foo(&self) -> u8; } /// The `TryInto::Error` type should not cause conflicts with the variant name. #[enum_dispatch(TestTrait)] enum TestEnum { A, Error, } struct A; impl TestTrait for A { fn foo(&self) -> u8 { 0 } } struct Error; impl TestTrait for Error { fn foo(&self) -> u8 { 1 } } #[test] fn main() { let te = TestEnum::from(Error); let _e: Error = te.try_into().unwrap(); }