25 lines
650 B
Rust
25 lines
650 B
Rust
use proc_macro::TokenStream;
|
|
use quote::quote;
|
|
|
|
extern crate proc_macro;
|
|
#[proc_macro_attribute]
|
|
pub fn packet(input: TokenStream, item: TokenStream) -> TokenStream {
|
|
let ast: syn::DeriveInput = syn::parse(item.clone()).unwrap();
|
|
|
|
let name = &ast.ident;
|
|
|
|
let (impl_generics, ty_generics, _) = ast.generics.split_for_impl();
|
|
|
|
let input: proc_macro2::TokenStream = input.into();
|
|
let item: proc_macro2::TokenStream = item.into();
|
|
|
|
let gen = quote! {
|
|
#item
|
|
impl #impl_generics crate::bytebuf::packet_id::Packet for #name #ty_generics {
|
|
const PACKET_ID: i32 = #input;
|
|
}
|
|
};
|
|
|
|
gen.into()
|
|
}
|