在 Rust 中使用 Sha256 散列枚举值

Hash an Enum value using Sha256 in Rust

我正在使用 Sha256 对多个值进行哈希处理。值可以是枚举,我想知道如何对其进行哈希处理

use sha2::Sha256

enum EnumType{
  A,
  B,
  C { value: u8 }
}

let enum_value = EnumType::A;
let mut hasher = Sha256::new();

// How to hash the enum?
// hasher.update(enum_value);

hasher.finalize()

最简单的方法是为每个枚举值分配一个常量值,但这似乎不干净

fn get_enum_value(value: &EnumType)-> &[u8]{
    match value {
        EnumType::A => &[1u8],
        EnumType::B => &[2u8],
        EnumType::C { value } => &[3u8, value]
    }
}

// ... //
hasher.update(get_enum_value(enum_value));
// ... //

有没有更好的方法?

Rust 不会向用户公开枚举的内存布局,但 Sha256 对字节序列进行操作,因此在某些时候您必须指定枚举如何转换为字节。您可以按照您的建议手动执行,或者您也可以使用例如 bincode or serde_json 序列化您的结构以进行哈希处理。