2 个不稳定版本
0.2.0 | 2021年9月10日 |
---|---|
0.1.0 | 2021年7月9日 |
16 在 #multi-hash
每月 下载 38 次
在 2 个crate中使用(通过 sp-multihash)
25KB
605 代码行
此过程宏从哈希器列表派生自定义 Multihash 代码表。它还生成一个名为 Multihash
的公共类型,对应于指定的 alloc_size
。
摘要以固定大小栈分配。这个大小需要足够大,可以容纳任何指定的哈希摘要。这不能在编译时可靠地确定,因此需要通过 alloc_size
属性手动设置。您可能还想将其设置得比所需的回溯/前向兼容性所需的大小更大。
如果您将 #mh(alloc_size = …)
设置得太低,您将得到编译器错误。请注意,大小仅在进行语法检查时进行检查,而不是在类型级别上。这意味着摘要需要具有大小 const 泛型,例如有效的 usize
,例如 32
或 64
。
您可以通过设置 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