7个不稳定版本
0.9.0 | 2023年6月6日 |
---|---|
0.8.1 | 2022年11月7日 |
0.8.0 | 2022年2月1日 |
0.7.2 | 2021年5月26日 |
0.6.0 | 2020年10月30日 |
在 过程宏 中排名 441
每月下载量 285,684
用于 636 个crate(2个直接使用)
41KB
665 行
用于自定义Multihash代码表的进程宏。
此进程宏从哈希器列表派生自定义Multihash代码表。它还生成一个名为 Multihash
的公共类型,该类型对应于指定的 alloc_size
。
摘要使用固定大小的栈分配。这个大小需要足够大,可以容纳任何指定的哈希摘要。这不能在编译时可靠地确定,因此需要通过 alloc_size
属性手动设置。您可能还想将其设置为比向后/向前兼容所需的大小更大的值。
如果您将 #mh(alloc_size = …)
设置得太低,您将收到编译器错误。请注意,大小仅在语法级别进行检查,而不是 类型级别。这意味着摘要需要具有大小const泛型,例如有效的 usize
,例如 32
或 64
。
您可以通过设置 no_alloc_size_errors
属性来禁用这些编译器错误。如果您例如为哈希摘要指定了类型别名,并且您确信您使用了正确的 alloc_size
值,这可能很有用。
当您想定义自己的代码表时,您应该只依赖 multihash-derive
。它为您导出 multihash
crate。
示例
```ignore : proc-macro-crate
在文档中不起作用,请参阅 https://github.com/bkchr/proc-macro-crate/issues/14 use multihash_derive::{Hasher, MultihashDigest};
struct FooHasher;
实现 FooHasher 的 Hasher { // 实现哈希器 ...
fn update(&mut self, input: &[u8]) {
}
fn finalize(&mut self) -> &[u8] {
&[]
}
fn reset(&mut self) {
}
}
#[derive(Clone, Copy, Debug, Eq, MultihashDigest, PartialEq)] #[mh(alloc_size = 64)] pub enum Code { #[mh(code = 0x01, hasher = FooHasher)] Foo }
let hash = Code::Foo.digest(b"hello world!");
println!("{:02x?}", hash);
依赖关系
~3.5MB
~64K SLoC