entropy-macro 0.3.3

Macros library for ENTROPY<rust>.
Documentation
// 在单独的模块中定义全局结构体和 trait
use proc_macro::TokenStream;
use quote::quote;
use syn::{parse_macro_input, Data, DeriveInput, Fields};

/*
初始化参数
*/
#[proc_macro]
pub fn init(_input: TokenStream) -> TokenStream {
    quote! {
        #[derive(PartialEq, Eq, PartialOrd, Ord, Clone, Copy, Hash)]
        pub struct ID(usize);
        pub trait Entity {
            fn id(&self) -> ID;
        }
    }
    .into()
}

/*
实现特性Entity的默认派生
使用方法:
  #[derive(Entity)]
*/
#[proc_macro_derive(EntityBase)]
pub fn entity_derive(input: TokenStream) -> TokenStream {
    // 解析输入的 Rust 代码
    let input = parse_macro_input!(input as DeriveInput);

    // 提取结构体的名称和字段内容
    let struct_name = &input.ident;
    let _fields = match input.data {
        Data::Struct(ref data) => match data.fields {
            Fields::Unnamed(ref fields) => &fields.unnamed,
            _ => panic!("实体必须为未名结构体"),
        },
        _ => panic!("实体必须为结构体"),
    };

    // 生成派生的定义
    let expanded = quote! {
        impl Entity for #struct_name{
            fn id(&self) -> ID{
                self.0
            }
        }
    };

    // 将生成的代码转换为TokenStream并返回
    TokenStream::from(expanded)
}