atomize_macro/lib.rs
1extern crate proc_macro;
2
3use std::{
4 collections::hash_map::DefaultHasher,
5 hash::{Hash, Hasher},
6};
7
8use proc_macro::TokenStream;
9use quote::quote;
10use syn;
11
12#[proc_macro]
13pub fn a(input: TokenStream) -> TokenStream {
14 let name = syn::parse_macro_input!(input as syn::Ident).to_string();
15
16 let hash: u64 = {
17 let mut hasher = DefaultHasher::new();
18 name.hash(&mut hasher);
19 hasher.finish()
20 };
21
22 TokenStream::from(quote! {
23 Atom::from(#hash)
24 })
25}