1use proc_macro::TokenStream;
2use quote::quote;
3
4#[proc_macro]
5pub fn parse_logos(_input: TokenStream) -> TokenStream {
6 let raw_logos = include_str!("../logos.sh").replace("\r\n", "\n");
7 let raw_logos = raw_logos
8 .split_once("in\n")
9 .expect("Invalid logos.sh file")
10 .1;
11 let raw_logos = raw_logos
12 .split_once("\nesac")
13 .expect("Invalid logos.sh file")
14 .0;
15
16 let mut tux = None;
17 let logos = raw_logos
18 .split(";;\n")
19 .filter_map(|raw_logo| {
20 let (is_tux, logo) = pfetch_logo_parser::parse_logo(raw_logo)?;
21 if is_tux {
22 tux = Some(logo.clone());
23 }
24 Some(logo)
25 })
26 .collect::<Vec<_>>();
27
28 let tux = tux.unwrap();
29
30 quote! { (#tux, [#(#logos),*]) }.into()
31}