pfetch_extractor/
lib.rs

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}