1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
//! This proc macro derives a [`MultihashDigest`] implementation from a list of hashers.
//!
//! # Example
//!
//! ```compile_fail
//! use multihash::derive::Multihash;
//! use multihash::{Hasher, MultihashDigest};
//!
//! const FOO: u64 = 0x01;
//! const BAR: u64 = 0x02;
//!
//! #[derive(Clone, Debug, Eq, Multihash, PartialEq)]
//! pub enum Multihash {
//!     #[mh(code = FOO, hasher = multihash::Sha2_256)]
//!     Foo(multihash::Sha2Digest<multihash::U32>),
//!     #[mh(code = BAR, hasher = multihash::Sha2_512)]
//!     Bar(multihash::Sha2Digest<multihash::U64>),
//! }
//! ```
//!
//! [`MultihashDigest`]: ../multihash/trait.MultihashDigest.html
extern crate proc_macro;

mod multihash;
mod utils;

use proc_macro::TokenStream;
use proc_macro_error::proc_macro_error;
use synstructure::{decl_derive, Structure};

decl_derive!([Multihash, attributes(mh)] => #[proc_macro_error] multihash);
fn multihash(s: Structure) -> TokenStream {
    multihash::multihash(s).into()
}