denumic 0.1.0

Creating enum-based runtime dispatched traits
Documentation
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
use std::{
    hash::{DefaultHasher, Hash, Hasher},
    time::SystemTime,
};

use syn::{spanned::Spanned, Ident};

pub fn uid<T: Spanned>(from: &T) -> Ident {
    let span = from.span();
    let mut hasher = DefaultHasher::new();
    span.source_text().hash(&mut hasher);
    SystemTime::now()
        .duration_since(SystemTime::UNIX_EPOCH)
        .unwrap()
        .hash(&mut hasher);
    let id = hasher.finish();
    Ident::new(&format!("__uid_{}", id), span)
}