Skip to main content

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}