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

macro no-std tiny-multihash-derive

用于生成自定义Multihash表的进程宏

5个不稳定版本

0.5.0 2020年10月1日
0.4.3 2020年10月1日
0.4.2 2020年9月18日
0.4.0 2020年8月25日
0.3.0 2020年8月19日

#17#multi-hash

Download history 23/week @ 2024-03-13 20/week @ 2024-03-20 18/week @ 2024-03-27 41/week @ 2024-04-03 31/week @ 2024-04-10 34/week @ 2024-04-17 36/week @ 2024-04-24 6/week @ 2024-05-01 10/week @ 2024-05-08 11/week @ 2024-05-15 8/week @ 2024-05-22 30/week @ 2024-05-29 24/week @ 2024-06-05 18/week @ 2024-06-12 11/week @ 2024-06-19 9/week @ 2024-06-26

64 每月下载量
2 个crate中使用 (通过 tiny-multihash)

MIT 许可证

27KB
590 代码行

此进程宏从哈希器列表中派生自定义Multihash代码表。

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

如果您将 #mh(alloc_size =) 设置得太低,您将得到编译器错误。请注意,仅对大小进行语法级别的检查,而 不是 类型级别的检查。这意味着摘要需要有一个大小泛型,它是一个有效的 typenum,例如 U32generic_array::typenum::U64

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

示例

use tiny_multihash::derive::Multihash;
use tiny_multihash::{U32, U64, MultihashCode};

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

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

依赖关系

~2MB
~46K SLoC