У меня есть функция, которая читает биты и создает перечисление. В настоящее время вызывающая сторона должна предоставить как EnumType, так и представление этого перечисления. Как изменить функцию таким образом, чтобы представление выводилось из EnumType, чтобы вызывающему требовалось только предоставить EnumType, а не его представление?
// Example enum:
use num_enum::TryFromPrimitive;
#[derive(Debug, Clone, Copy, TryFromPrimitive)]
#[repr(u8)]
pub enum VehicleType {
Boat = 0,
Car = 1,
}
// Example of current functional call
extract_enum_bits::<VehicleType, u8>(&data, 2, 6);
// Current function:
fn extract_enum_bits<EnumType: std::convert::TryFrom<Repr>, Repr: ReadInto>(data: &[u8],start_bit: u64, bits_to_read: u8) -> EnumType
where <EnumType as std::convert::TryFrom<Repr>>::Error : std::fmt::Debug {
let enum_as_repr_int = extract_bits::<Repr>(&data, start_bit, bits_to_read);
EnumType::try_from(enum_as_repr_int).unwrap()
}
Синтаксис вызова функции поиска:
extract_enum_bits::<VehicleType>(&data, 2, 6)
Как можно изменить функцию extract_enum_bits для поддержки этого нового синтаксиса вызова?
Или для формулировки вопроса по-другому. Как получить тип представления enum (в этом примере u8) в вопросительных знаках, а также удовлетворить требование "std :: convert :: From", наложенное ":: try_from" в последней строке?
pub fn extract_enum_bits<EnumType: TryFromPrimitive>(data: &[u8],start_bit: u64, bits_to_read: u8) -> EnumType {
let enum_as_repr_int = extract_bits::< ???? >(&data, start_bit, bits_to_read);
EnumType::try_from(enum_as_repr_int).unwrap()
}