thunderbird_macros/
lib.rs1use 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}