gecs_macros 0.3.0

Procedural macros for the gecs crate.
Documentation
use convert_case::{Case, Casing};
use proc_macro2::TokenStream;
use quote::{format_ident, quote, ToTokens};

use crate::parse::ParseEcsComponentId;

#[allow(non_snake_case)]
pub fn generate_ecs_component_id(util: ParseEcsComponentId) -> TokenStream {
    let get_id_component = format_ident!("get_id_{}", to_snake(&util.component.to_string()));
    let archetype = match util.archetype {
        Some(archetype) => archetype.into_token_stream(),
        None => quote!(MatchedArchetype),
    };

    quote!(#archetype::#get_id_component())
}

fn to_snake(name: &String) -> String {
    name.from_case(Case::Pascal).to_case(Case::Snake)
}