6 个版本
0.3.0 | 2024 年 6 月 25 日 |
---|---|
0.2.5 | 2024 年 7 月 11 日 |
0.2.2 | 2024 年 3 月 28 日 |
0.1.2 |
|
0.1.0 | 2023 年 6 月 26 日 |
#3 in #discriminator
166,764 个月下载量
用于 460 个 crate(8 个直接使用)
12KB
192 行
SPL Discriminator
此库允许轻松管理 8 字节判别符。
ArrayDiscriminator 结构体
使用此软件包,您可以使用 ArrayDiscriminator
类型来管理 8 字节判别符,用于通用目的。
let my_discriminator = ArrayDiscriminator::new([8, 5, 1, 56, 10, 53, 9, 198]);
new(..)
函数也是一个 常量函数,因此您也可以在常量中使用 ArrayDiscriminator
。
const MY_DISCRIMINATOR: ArrayDiscriminator = ArrayDiscriminator::new([8, 5, 1, 56, 10, 53, 9, 198]);
ArrayDiscriminator
结构体还提供了一个另一个常量函数 as_slice(&self)
,因此您也可以在常量中使用 as_slice()
。
const MY_DISCRIMINATOR_SLICE: &[u8] = MY_DISCRIMINATOR.as_slice();
SplDiscriminate 特性
还有一个名为 SplDiscriminate
的特性,它将为您提供 ArrayDiscriminator
常量类型以及判别符的切片表示。这在与 match 语句结合使用时特别方便。
/// A trait for managing 8-byte discriminators in a slab of bytes
pub trait SplDiscriminate {
/// The 8-byte discriminator as a `[u8; 8]`
const SPL_DISCRIMINATOR: ArrayDiscriminator;
/// The 8-byte discriminator as a slice (`&[u8]`)
const SPL_DISCRIMINATOR_SLICE: &'static [u8] = Self::SPL_DISCRIMINATOR.as_slice();
}
SplDiscriminate 派生宏
《SplDiscriminate》派生宏对于那些希望从特定的字符串字面量中派生他们的8字节判别器的人来说是一个非常有用的工具。通常,您需要运行一个哈希函数来处理字符串字面量,然后复制前8个字节,然后将这些字节硬编码到上面的语句中。
相反,您只需使用《SplDiscriminate》注释一个结构体或枚举,并通过《discriminator_hash_input》属性提供 哈希输入,宏就会自动为您派生8字节判别器!
#[derive(SplDiscriminate)] // Implements `SplDiscriminate` for your struct/enum using your declared string literal hash_input
#[discriminator_hash_input("some_discriminator_hash_input")]
pub struct MyInstruction1 {
arg1: String,
arg2: u8,
}
let my_discriminator: ArrayDiscriminator = MyInstruction1::SPL_DISCRIMINATOR;
let my_discriminator_slice: &[u8] = MyInstruction1::SPL_DISCRIMINATOR_SLICE;
注意:使用宏派生的8字节判别器始终是结果哈希字节的前 8个字节。
依赖项
~11-19MB
~267K SLoC