Generics 如何获得Rust中泛型枚举的基本表示?

Generics 如何获得Rust中泛型枚举的基本表示?,generics,enums,rust,traits,repr,Generics,Enums,Rust,Traits,Repr,我有一个函数,可以读取位并创建枚举。 当前,调用方需要提供枚举类型和此枚举的表示形式。 如何更改函数,使其表示形式从EnumType推导而来,从而使调用方只需要提供EnumType而不需要提供其表示形式 // Example enum: use num_enum::TryFromPrimitive; #[derive(Debug, Clone, Copy, TryFromPrimitive)] #[repr(u8)] pub enum VehicleType { Boat = 0,

我有一个函数,可以读取位并创建枚举。 当前,调用方需要提供枚举类型和此枚举的表示形式。 如何更改函数,使其表示形式从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()
}
//示例枚举:
使用num_enum::TryFromPrimitive;
#[派生(调试、克隆、复制、TryFromPrimitive)]
#[报告(u8)]
发布枚举车辆类型{
船=0,
Car=1,
}
//当前函数调用的示例
提取枚举位::(&data,2,6);
//当前功能:
fn提取枚举位(数据:&[u8],开始位:u64,位到读取位:u8)->EnumType
其中::错误:std::fmt::调试{
让enum_as_repr_int=extract_bits::(&data,start_bit,bits_to_read);
EnumType::try_from(enum_as_repr_int).unwrap()
}
所需函数调用语法:

extract_enum_bits::<VehicleType>(&data, 2, 6)
提取枚举位::(&data,2,6)
如何更改函数extract_enum_bits以支持这种新的调用语法

或者用不同的方式来表述这个问题。如何在问号处获得枚举表示类型(在本例中为u8),同时还满足最后一行上的“std::convert::From”requirement by::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()
}
pub fn extract_enum_bits(数据:&[u8],起始位:u64,位到位读取:u8)->EnumType{
让enum_as_repr_int=extract_bits::<??>(&data,start_bit,bits_to_read);
EnumType::try_from(enum_as_repr_int).unwrap()
}