pso2packetlib_impl/
lib.rs1mod packet_structs;
2mod protocol_enum;
3use packet_structs::{helper_deriver, packet_deriver};
4use proc_macro::TokenStream;
5use proc_macro2::TokenStream as TS2;
6use protocol_enum::protocol_deriver;
7use quote::ToTokens;
8use syn::{parse_macro_input, DeriveInput};
9
10#[proc_macro_derive(
14 PacketReadWrite,
15 attributes(Id, Seek, SeekAfter, Const_u16, Flags, Magic, OnlyOn, NotOn)
16)]
17pub fn packet_read_write_derive(input: TokenStream) -> TokenStream {
18 let input = parse_macro_input!(input as DeriveInput);
19 packet_deriver(&input, true).unwrap_or_else(|err| err.to_compile_error().into())
20}
21
22#[proc_macro_derive(
24 PacketRW,
25 attributes(Id, Seek, SeekAfter, Const_u16, Flags, Magic, OnlyOn, NotOn)
26)]
27pub fn pub_packet_read_write_derive(input: TokenStream) -> TokenStream {
28 let input = parse_macro_input!(input as DeriveInput);
29 packet_deriver(&input, false).unwrap_or_else(|err| err.to_compile_error().into())
30}
31
32#[proc_macro_derive(
34 HelperReadWrite,
35 attributes(
36 Seek,
37 SeekAfter,
38 Const_u16,
39 Read_default,
40 Skip,
41 Flags,
42 BitFlags,
43 ManualRW,
44 OnlyOn,
45 NotOn,
46 )
47)]
48pub fn helper_read_write_derive(input: TokenStream) -> TokenStream {
49 let input = parse_macro_input!(input as DeriveInput);
50 helper_deriver(&input, true).unwrap_or_else(|err| output_error(input.to_token_stream(), err))
51}
52
53#[proc_macro_derive(
55 HelperRW,
56 attributes(
57 Seek,
58 SeekAfter,
59 Const_u16,
60 Read_default,
61 Skip,
62 Flags,
63 BitFlags,
64 ManualRW,
65 OnlyOn,
66 NotOn,
67 )
68)]
69pub fn pub_helper_read_write_derive(input: TokenStream) -> TokenStream {
70 let input = parse_macro_input!(input as DeriveInput);
71 helper_deriver(&input, false).unwrap_or_else(|err| output_error(input.to_token_stream(), err))
72}
73
74#[proc_macro_derive(
76 ProtocolReadWrite,
77 attributes(Id, Empty, Raw, Unknown, NGS, Classic, NA, JP, Vita, Category)
78)]
79pub fn protocol_read_write_derive(input: TokenStream) -> TokenStream {
80 let input = parse_macro_input!(input as DeriveInput);
81 protocol_deriver(&input, true).unwrap_or_else(|err| output_error(input.to_token_stream(), err))
82}
83
84#[proc_macro_derive(
86 ProtocolRW,
87 attributes(Id, Empty, Raw, Unknown, NGS, Classic, NA, JP, Vita, Category)
88)]
89pub fn pub_protocol_read_write_derive(input: TokenStream) -> TokenStream {
90 let input = parse_macro_input!(input as DeriveInput);
91 protocol_deriver(&input, false).unwrap_or_else(|err| output_error(input.to_token_stream(), err))
92}
93
94fn output_error(mut input: TS2, err: syn::Error) -> TokenStream {
95 input.extend(err.to_compile_error());
96 input.into()
97}