project_wormhole_proc/lib.rs
1
2use proc_macro::TokenStream;
3use syn::parse_macro_input;
4use quote::quote;
5mod record_definition;
6mod record_consts;
7mod versioned;
8mod versioned_consts;
9
10
11// #[proc_macro]
12// pub fn define_record(input: TokenStream) -> TokenStream {
13// let input = parse_macro_input!(input as esm::RecordDefinition);
14// let out = quote! { #input };
15// out.into()
16// }
17
18
19/// ```rust
20/// use proc::define_record2;
21///
22/// define_record2! {
23/// b"TEST", // FourCC identifier
24/// TestRecord, // Record Struct name
25/// [
26/// EditorId; // Common field
27/// b"CUST", CustomField, u32; // Custom field
28/// b"YNAM", PickUpSound, [b"SOUN"]; // Record reference and restraint to SOUN type
29/// ],
30/// // Flags - Position / Name
31/// [
32/// 0x00000001, IsImportant;
33/// ]
34/// }
35///
36///
37/// ```
38#[proc_macro]
39pub fn define_record2(input: TokenStream) -> TokenStream {
40 let input = parse_macro_input!(input as record_definition::RecordDefinition2);
41 let out = quote! { #input };
42 out.into()
43}
44
45
46
47#[proc_macro_derive(VersionedParse)]
48pub fn derive_versioned_parse(input: TokenStream) -> TokenStream {
49 let input = parse_macro_input!(input as syn::DeriveInput);
50 let out = versioned::impl_versioned_parse(&input);
51 out.into()
52}