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}