6 个版本
0.1.6 | 2024 年 3 月 29 日 |
---|---|
0.1.5 | 2023 年 12 月 24 日 |
0.1.4 | 2023 年 11 月 19 日 |
#162 in 魔法豆
每月 602 次下载
用于 71 个 crate (5 个直接使用)
12KB
192 行
SPL 判别器
此库允许轻松管理 8 字节判别器。
ArrayDiscriminator 结构体
使用此 crate,您可以使用 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字节。
依赖项
~16–25MB
~417K SLoC