simplecs_derive 0.1.0

Procedural macros for the crate simplecs.
Documentation
extern crate proc_macro;

use proc_macro::{TokenStream, TokenTree};

#[proc_macro_derive(Component)]
pub fn component_derive(input: TokenStream) -> TokenStream {
    let mut tokens = input.into_iter();
    let mut struct_name = None;
    while let Some(token) = tokens.next() {
        match token {
            TokenTree::Ident(ident) => {
                if ident.to_string() == "struct" {
                    if let Some(TokenTree::Ident(name)) = tokens.next() {
                        struct_name = Some(name.to_string());
                        break;
                    }
                }
            }
            _ => continue,
        }
    }
    let name = match struct_name {
        Some(name) => name,
        None => {
            return "compile_error!(\"Expected a struct definition\")"
                .parse()
                .unwrap()
        }
    };
    let output = format!("impl Component for {name} {{}}");
    output.parse().unwrap()
}