6 个版本

0.3.0 2024 年 6 月 25 日
0.2.5 2024 年 7 月 11 日
0.2.2 2024 年 3 月 28 日
0.1.2 2024 年 3 月 28 日
0.1.0 2023 年 6 月 26 日

#3 in #discriminator

Download history 28965/week @ 2024-05-06 30978/week @ 2024-05-13 24448/week @ 2024-05-20 27525/week @ 2024-05-27 30026/week @ 2024-06-03 31909/week @ 2024-06-10 30840/week @ 2024-06-17 33263/week @ 2024-06-24 28604/week @ 2024-07-01 31488/week @ 2024-07-08 30422/week @ 2024-07-15 35156/week @ 2024-07-22 36475/week @ 2024-07-29 56357/week @ 2024-08-05 39325/week @ 2024-08-12 32706/week @ 2024-08-19

166,764 个月下载量
用于 460 个 crate(8 个直接使用)

Apache-2.0

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