thunderbird_macros/
lib.rs

1use proc_macro::TokenStream;
2
3#[proc_macro]
4pub fn color(item: TokenStream) -> TokenStream {
5    let params: &str = &item.to_string();
6    let params = params.trim();
7    let params = params.split(" ");
8    
9    let mut colors: [u8; 3] = [0,0,0];
10    for (i, param) in params.enumerate() {
11        colors[i] = param.trim().parse::<u8>().expect("Expected a number in color macro call.");
12        let c = (colors[i] as f32 / 256.0) * (2 as f32).powi(if i == 2 { 2 } else { 3 });
13        colors[i] = c as u8;
14    }
15    
16    let r = colors[0] << 5;
17    let g = colors[1] << 2;
18    let b = colors[2];
19    let rgb: u8 = r | g | b;
20    
21    return format!("{:#010b}", rgb).parse::<TokenStream>().unwrap();
22}