#multi-hash #derive #table #attributes #macro-derive #error #enums

no-std sp-multihash-derive

用于派生自定义 sp-multihash 表的过程宏

2 个不稳定版本

0.2.0 2021年9月10日
0.1.0 2021年7月9日

16#multi-hash

每月 下载 38
2 个crate中使用(通过 sp-multihash

MIT 协议

25KB
605 代码行

此过程宏从哈希器列表派生自定义 Multihash 代码表。它还生成一个名为 Multihash 的公共类型,对应于指定的 alloc_size

摘要以固定大小栈分配。这个大小需要足够大,可以容纳任何指定的哈希摘要。这不能在编译时可靠地确定,因此需要通过 alloc_size 属性手动设置。您可能还想将其设置得比所需的回溯/前向兼容性所需的大小更大。

如果您将 #mh(alloc_size =) 设置得太低,您将得到编译器错误。请注意,大小仅在进行语法检查时进行检查,而不是在类型级别上。这意味着摘要需要具有大小 const 泛型,例如有效的 usize,例如 3264

您可以通过设置 no_alloc_size_errors 属性来禁用这些编译器错误。如果您例如已指定了哈希摘要的类型别名,并且您确信您为 alloc_size 指定了正确的值,则这可能会很有用。

示例

use sp_multihash::derive::Multihash;
use sp_multihash::MultihashDigest;

#[derive(Clone, Copy, Debug, Eq, Multihash, PartialEq)]
#[mh(alloc_size = 64)]
pub enum Code {
    #[mh(code = 0x01, hasher = sp_multihash::Sha2_256, digest = sp_multihash::Sha2Digest<32>)]
    Foo,
    #[mh(code = 0x02, hasher = sp_multihash::Sha2_512, digest = sp_multihash::Sha2Digest<64>)]
    Bar,
}

let hash = Code::Foo.digest(b"hello world!");
println!("{:02x?}", hash);

依赖关系

~4MB
~77K SLoC