6 个版本

0.1.6 2024 年 3 月 29 日
0.1.5 2023 年 12 月 24 日
0.1.4 2023 年 11 月 19 日

#162 in 魔法豆

Download history 276/week @ 2024-03-12 502/week @ 2024-03-19 473/week @ 2024-03-26 260/week @ 2024-04-02 124/week @ 2024-04-09 155/week @ 2024-04-16 197/week @ 2024-04-23 155/week @ 2024-04-30 158/week @ 2024-05-07 139/week @ 2024-05-14 155/week @ 2024-05-21 193/week @ 2024-05-28 150/week @ 2024-06-04 120/week @ 2024-06-11 182/week @ 2024-06-18 102/week @ 2024-06-25

每月 602 次下载
用于 71 个 crate (5 个直接使用)

Apache-2.0

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