static_noise/
lib.rs

1/*!
2A simple crate for generation static noise at compile time.
3
4# Example
5
6```rust
7let random_company_name: &'static str = static_noise::company_name!();
8let random_super_power: &'static str = static_noise::super_power!();
9let random_uuid: &'static str = static_noise::uuid!();
10```
11*/
12
13use proc_macro::TokenStream;
14use rand::{thread_rng, Rng};
15use uuid::Uuid;
16
17static COMPANY_NAMES: &str = include_str!("../random-data/company-names.json");
18
19/// returns a random name for a company
20#[proc_macro]
21pub fn company_name(_: TokenStream) -> TokenStream {
22    let company_names: Vec<String> = serde_json::from_str(COMPANY_NAMES).unwrap();
23    let mut rng = thread_rng();
24    format!("\"{}\"", company_names[(rng.gen::<u16>() % company_names.len() as u16 - 1) as usize]).parse().unwrap()
25}
26
27static SUPERPOWERS: &str = include_str!("../random-data/company-names.json");
28
29/// returns a random superpower
30#[proc_macro]
31pub fn superpower(_: TokenStream) -> TokenStream {
32    let super_powers: Vec<String> = serde_json::from_str(SUPERPOWERS).unwrap();
33    let mut rng = thread_rng();
34    format!("\"{}\"", super_powers[(rng.gen::<u16>() % super_powers.len() as u16 - 1) as usize]).parse().unwrap()
35}
36
37/// returns a random uuid
38#[proc_macro]
39pub fn uuid(_: TokenStream) -> TokenStream {
40    let uuid = Uuid::new_v4();
41    format!("\"{}\"", uuid).parse().unwrap()
42}
43