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
use crate::ByteArray;
use proc_macro2::{Ident, Span};
use sha2::{Digest, Sha256};
use syn::Ident as SynIdent;
pub fn first_four_bytes_of_sha256_hash(string: &str) -> ByteArray {
let string_as_bytes = string.as_bytes();
let mut hasher = Sha256::new();
hasher.update(string_as_bytes);
let result = hasher.finalize();
let mut output = ByteArray::default();
output[4..].copy_from_slice(&result[..4]);
output
}
pub fn ident(name: &str) -> Ident {
Ident::new(name, Span::call_site())
}
pub fn safe_ident(name: &str) -> Ident {
syn::parse_str::<SynIdent>(name).unwrap_or_else(|_| ident(&format!("{}_", name)))
}