unity_mirror_macro_rs/
lib.rs1mod namespace;
2mod network_behaviour;
3
4use proc_macro::TokenStream;
5
6mod callback_processor;
7mod metadata_settings;
8mod network_message;
9
10mod network_manager;
11
12mod network_manager_factory;
13
14pub(crate) mod utils;
15
16mod mirror;
17
18mod extends;
19
20macro_rules! attribute_args {
21 ($type_name:ident, $($field_name:ident),+) => {
22 #[derive(Default)]
23 #[allow(unused)]
24 struct $type_name {
25 $($field_name: Option<String>,)*
26 }
27
28
29 impl syn::parse::Parse for $type_name {
30 fn parse(input: syn::parse::ParseStream) -> syn::Result<Self> {
31 use quote::ToTokens;
32
33 let mut result= $type_name::default();
34
35 while !input.is_empty() {
36 let name_value: syn::MetaNameValue = input.parse()?;
37 let key = name_value.path.to_token_stream().to_string();
38 let value = name_value.value.to_token_stream();
39
40 match key.as_str() {
41 $(stringify!($field_name) => {
42 result.$field_name = Some(value.to_string().trim_matches('"').to_string());
43 },)*
44 _ => {}
45 }
46
47 if input.peek(syn::Token![,]) {
48 input.parse::<syn::Token![,]>()?;
49 }
50 }
51
52 Ok(result)
53 }
54 }
55 };
56}
57
58#[proc_macro_attribute]
61pub fn network_behaviour(attr: TokenStream, item: TokenStream) -> TokenStream {
62 network_behaviour::handler(attr, item)
63}
64
65#[proc_macro_attribute]
66pub fn metadata(_: TokenStream, _: TokenStream) -> TokenStream {
67 TokenStream::new()
68}
69
70attribute_args!(NamespaceArgs, prefix, rename);
71#[proc_macro_attribute]
72pub fn namespace(attr: TokenStream, item: TokenStream) -> TokenStream {
73 namespace::handler(attr, item)
74}
75
76#[proc_macro_derive(MetadataSettingsWrapper)]
77pub fn derive_metadata_settings_wrapper(input: TokenStream) -> TokenStream {
78 metadata_settings::wrapper::handler(input)
79}
80
81#[proc_macro]
82pub fn settings_wrapper_register(input: TokenStream) -> TokenStream {
83 metadata_settings::wrapper_register::handler(input)
84}
85
86#[proc_macro_derive(SyncState, attributes(sync_var, sync_obj))]
87pub fn derive_sync_state(_: TokenStream) -> TokenStream {
88 TokenStream::new()
89}
90
91#[proc_macro_attribute]
92pub fn ancestor_on_serialize(attr: TokenStream, item: TokenStream) -> TokenStream {
93 network_behaviour::ancestor_on_serialize(attr, item)
94}
95
96#[proc_macro_attribute]
97pub fn ancestor_on_deserialize(attr: TokenStream, item: TokenStream) -> TokenStream {
98 network_behaviour::ancestor_on_deserialize(attr, item)
99}
100
101#[proc_macro_attribute]
102pub fn parent_on_serialize(attr: TokenStream, item: TokenStream) -> TokenStream {
103 network_behaviour::parent_on_serialize(attr, item)
104}
105
106#[proc_macro_attribute]
107pub fn parent_on_deserialize(attr: TokenStream, item: TokenStream) -> TokenStream {
108 network_behaviour::parent_on_deserialize(attr, item)
109}
110
111#[proc_macro_derive(NetworkMessage)]
112pub fn message(input: TokenStream) -> TokenStream {
113 network_message::handler(input)
114}
115
116#[proc_macro_derive(CallbackProcessor)]
117pub fn callback_processor(input: TokenStream) -> TokenStream {
118 callback_processor::callback_processor_handler(input)
119}
120
121#[proc_macro_attribute]
122pub fn network_manager(attr: TokenStream, item: TokenStream) -> TokenStream {
123 network_manager::handler(attr, item)
124}
125
126#[proc_macro_derive(NetworkManagerFactory)]
127pub fn derive_network_manager_factory(item: TokenStream) -> TokenStream {
128 network_manager_factory::handler(item)
129}
130
131#[proc_macro_attribute]
132pub fn authenticator_factory(_: TokenStream, item: TokenStream) -> TokenStream {
133 mirror::authenticator_factory::handler(item)
134}
135
136#[proc_macro_attribute]
138pub fn command(attr: TokenStream, item: TokenStream) -> TokenStream {
139 mirror::component::command::handler(attr, item)
140}
141
142#[proc_macro_attribute]
144pub fn client_rpc(attr: TokenStream, item: TokenStream) -> TokenStream {
145 mirror::component::client_rpc::handler(attr, item)
146}
147
148#[proc_macro_attribute]
149pub fn target_rpc(attr: TokenStream, item: TokenStream) -> TokenStream {
150 mirror::component::target_rpc::handler(attr, item)
151}
152
153#[proc_macro_attribute]
154pub fn extends(attr: TokenStream, item: TokenStream) -> TokenStream {
155 extends::handler(attr, item)
156}
157
158mod action;
159#[proc_macro_attribute]
160pub fn action(attr: TokenStream, item: TokenStream) -> TokenStream {
161 action::handler(attr, item)
162}