1#![recursion_limit = "256"]
2
3use proc_macro::TokenStream;
4use syn::parse_macro_input;
5
6mod common_functions;
7
8mod functionmpst;
9
10use functionmpst::recv_all_aux_simple::RecvAllAuxSimple;
11use functionmpst::recv_aux_simple::RecvAuxSimple;
12use functionmpst::send_aux_simple::SendAuxSimple;
13
14mod choose_mpst_multi_to_all;
15
16use choose_mpst_multi_to_all::ChooseMultiToAll;
17
18mod macros_simple;
19
20use macros_simple::names::create_normal_name_short::CreateNormalNameShort;
21use macros_simple::offer::create_offer_mpst_session_multi::OfferMPSTSessionMulti;
22use macros_simple::recv::create_recv_mpst_session::CreateRecvMPSTSession;
23use macros_simple::roles::create_broadcast_role_short::CreateBroadcastRoleShort;
24use macros_simple::roles::create_normal_role_short::CreateNormalRoleShort;
25use macros_simple::send::create_send_mpst_session::CreateSendMPSTSession;
26
27mod macros_multiple;
28
29use macros_multiple::multiple::broadcast_cancel::BroadcastCancel;
30use macros_multiple::multiple::choose::choose_mpst_create_multi_to_all::ChooseMultiCreateToAll;
31use macros_multiple::multiple::choose::choose_mpst_multi_cancel_to_all::ChooseTypeMultiCancelToAll;
32use macros_multiple::multiple::choose::create_choose_mpst_session_multi_left::ChooseTypeMultiLeft;
33use macros_multiple::multiple::choose::create_choose_mpst_session_multi_right::ChooseTypeMultiRight;
34use macros_multiple::multiple::choose::create_choose_type_multi::ChooseTypeMulti;
35use macros_multiple::multiple::choose::create_fn_choose_mpst_cancel_multi_to_all_bundle::ChooseTypeCancelMultiToAllBundle;
36use macros_multiple::multiple::choose::create_fn_choose_mpst_multi_to_all_bundle::ChooseTypeMultiToAllBundle;
37use macros_multiple::multiple::close::close_mpst::CloseMpst;
38use macros_multiple::multiple::close::close_mpst_cancel::CloseMpstCancel;
39use macros_multiple::multiple::close::close_mpst_check_cancel::CloseMpstCheckCancel;
40use macros_multiple::multiple::create_meshedchannels::CreateMeshedChannels;
41use macros_multiple::multiple::fork_mpst_multi::ForkMPSTMulti;
42use macros_multiple::multiple::offer::create_offer_type_multi::OfferTypeMulti;
43use macros_multiple::multiple::send::create_send_check_cancel::CreateSendCheckCancel;
44use macros_multiple::multiple::send::create_send_mpst_cancel::CreateSendMPSTCancel;
45use macros_multiple::multiple::send::send_cancel::SendCancel;
46
47mod interleaved;
48
49use interleaved::close_mpst_interleaved::CloseMpstInterleaved;
50use interleaved::fork_mpst_multi_solo::ForkMPSTMultiSolo;
51
52mod checking;
59
60use checking::aux_checking::CheckingInput;
61use checking::aux_checking_impl::CheckingInputImpl;
62use checking::branching::branching_variants;
63
64mod baking;
65
66use baking::baking_basic::Baking;
67use baking::baking_interleaved_with_enum_and_cancel::BakingInterleavedWithEnumAndCancel;
68use baking::baking_with_cancel::BakingWithCancel;
69use baking::baking_with_enum::BakingWithEnum;
70use baking::baking_with_enum_and_cancel::BakingWithEnumAndCancel;
71
72mod baking_atmp;
73
74use baking_atmp::baking_atmp_interleaved_with_enum_and_cancel::BakingATMPInterleavedWithEnumAndCancel;
75use baking_atmp::baking_atmp_with_enum_and_cancel::BakingATMPWithEnumAndCancel;
76
77mod choose_atmp_mpst_multi_to_all;
78
79use choose_atmp_mpst_multi_to_all::ChooseATMPMultiToAll;
80
81#[proc_macro]
84pub fn recv_aux_simple(input: TokenStream) -> TokenStream {
85 let input = parse_macro_input!(input as RecvAuxSimple);
86 let output: proc_macro2::TokenStream = proc_macro2::TokenStream::from(input);
87 output.into()
88}
89
90#[proc_macro]
93pub fn recv_all_aux_simple(input: TokenStream) -> TokenStream {
94 let input = parse_macro_input!(input as RecvAllAuxSimple);
95 let output: proc_macro2::TokenStream = proc_macro2::TokenStream::from(input);
96 output.into()
97}
98
99#[proc_macro]
102pub fn send_aux_simple(input: TokenStream) -> TokenStream {
103 let input = parse_macro_input!(input as SendAuxSimple);
104 let output: proc_macro2::TokenStream = proc_macro2::TokenStream::from(input);
105 output.into()
106}
107
108#[proc_macro]
111pub fn choose_mpst_multi_to_all(input: TokenStream) -> TokenStream {
112 let input = parse_macro_input!(input as ChooseMultiToAll);
113 let output: proc_macro2::TokenStream = proc_macro2::TokenStream::from(input);
114 output.into()
115}
116
117#[proc_macro]
120pub fn create_normal_role_short(input: TokenStream) -> TokenStream {
121 let input = parse_macro_input!(input as CreateNormalRoleShort);
122 let output: proc_macro2::TokenStream = proc_macro2::TokenStream::from(input);
123 output.into()
124}
125
126#[proc_macro]
129pub fn create_normal_name_short(input: TokenStream) -> TokenStream {
130 let input = parse_macro_input!(input as CreateNormalNameShort);
131 let output: proc_macro2::TokenStream = proc_macro2::TokenStream::from(input);
132 output.into()
133}
134
135#[proc_macro]
138pub fn create_broadcast_role_short(input: TokenStream) -> TokenStream {
139 let input = parse_macro_input!(input as CreateBroadcastRoleShort);
140 let output: proc_macro2::TokenStream = proc_macro2::TokenStream::from(input);
141 output.into()
142}
143
144#[proc_macro]
147pub fn create_offer_mpst_session_multi(input: TokenStream) -> TokenStream {
148 let input = parse_macro_input!(input as OfferMPSTSessionMulti);
149 let output: proc_macro2::TokenStream = proc_macro2::TokenStream::from(input);
150 output.into()
151}
152
153#[proc_macro]
156pub fn create_recv_mpst_session(input: TokenStream) -> TokenStream {
157 let input = parse_macro_input!(input as CreateRecvMPSTSession);
158 let output: proc_macro2::TokenStream = proc_macro2::TokenStream::from(input);
159 output.into()
160}
161
162#[proc_macro]
165pub fn create_send_mpst_session(input: TokenStream) -> TokenStream {
166 let input = parse_macro_input!(input as CreateSendMPSTSession);
167 let output: proc_macro2::TokenStream = proc_macro2::TokenStream::from(input);
168 output.into()
169}
170
171#[proc_macro]
174pub fn send_cancel(input: TokenStream) -> TokenStream {
175 let input = parse_macro_input!(input as SendCancel);
176 let output: proc_macro2::TokenStream = proc_macro2::TokenStream::from(input);
177 output.into()
178}
179
180#[proc_macro]
183pub fn broadcast_cancel(input: TokenStream) -> TokenStream {
184 let input = parse_macro_input!(input as BroadcastCancel);
185 let output: proc_macro2::TokenStream = proc_macro2::TokenStream::from(input);
186 output.into()
187}
188
189#[proc_macro]
192pub fn close_mpst(input: TokenStream) -> TokenStream {
193 let input = parse_macro_input!(input as CloseMpst);
194 let output: proc_macro2::TokenStream = proc_macro2::TokenStream::from(input);
195 output.into()
196}
197
198#[proc_macro]
201pub fn close_mpst_check_cancel(input: TokenStream) -> TokenStream {
202 let input = parse_macro_input!(input as CloseMpstCheckCancel);
203 let output: proc_macro2::TokenStream = proc_macro2::TokenStream::from(input);
204 output.into()
205}
206
207#[proc_macro]
210pub fn fork_mpst_multi(input: TokenStream) -> TokenStream {
211 let input = parse_macro_input!(input as ForkMPSTMulti);
212 let output: proc_macro2::TokenStream = proc_macro2::TokenStream::from(input);
213 output.into()
214}
215
216#[proc_macro]
219pub fn create_choose_type_multi(input: TokenStream) -> TokenStream {
220 let input = parse_macro_input!(input as ChooseTypeMulti);
221 let output: proc_macro2::TokenStream = proc_macro2::TokenStream::from(input);
222 output.into()
223}
224
225#[proc_macro]
228pub fn create_choose_mpst_session_multi_left(input: TokenStream) -> TokenStream {
229 let input = parse_macro_input!(input as ChooseTypeMultiLeft);
230 let output: proc_macro2::TokenStream = proc_macro2::TokenStream::from(input);
231 output.into()
232}
233
234#[proc_macro]
237pub fn create_choose_mpst_session_multi_right(input: TokenStream) -> TokenStream {
238 let input = parse_macro_input!(input as ChooseTypeMultiRight);
239 let output: proc_macro2::TokenStream = proc_macro2::TokenStream::from(input);
240 output.into()
241}
242
243#[proc_macro]
246pub fn choose_mpst_multi_cancel_to_all(input: TokenStream) -> TokenStream {
247 let input = parse_macro_input!(input as ChooseTypeMultiCancelToAll);
248 let output: proc_macro2::TokenStream = proc_macro2::TokenStream::from(input);
249 output.into()
250}
251
252#[proc_macro]
255pub fn create_fn_choose_mpst_multi_to_all_bundle(input: TokenStream) -> TokenStream {
256 let input = parse_macro_input!(input as ChooseTypeMultiToAllBundle);
257 let output: proc_macro2::TokenStream = proc_macro2::TokenStream::from(input);
258 output.into()
259}
260
261#[proc_macro]
264pub fn create_fn_choose_mpst_cancel_multi_to_all_bundle(input: TokenStream) -> TokenStream {
265 let input = parse_macro_input!(input as ChooseTypeCancelMultiToAllBundle);
266 let output: proc_macro2::TokenStream = proc_macro2::TokenStream::from(input);
267 output.into()
268}
269
270#[proc_macro]
273pub fn create_offer_type_multi(input: TokenStream) -> TokenStream {
274 let input = parse_macro_input!(input as OfferTypeMulti);
275 let output: proc_macro2::TokenStream = proc_macro2::TokenStream::from(input);
276 output.into()
277}
278
279#[proc_macro]
282pub fn create_send_mpst_cancel(input: TokenStream) -> TokenStream {
283 let input = parse_macro_input!(input as CreateSendMPSTCancel);
284 let output: proc_macro2::TokenStream = proc_macro2::TokenStream::from(input);
285 output.into()
286}
287
288#[proc_macro]
291pub fn create_send_check_cancel(input: TokenStream) -> TokenStream {
292 let input = parse_macro_input!(input as CreateSendCheckCancel);
293 let output: proc_macro2::TokenStream = proc_macro2::TokenStream::from(input);
294 output.into()
295}
296
297#[proc_macro]
300pub fn create_meshedchannels(input: TokenStream) -> TokenStream {
301 let input = parse_macro_input!(input as CreateMeshedChannels);
302 let output: proc_macro2::TokenStream = proc_macro2::TokenStream::from(input);
303 output.into()
304}
305
306#[proc_macro]
309pub fn close_mpst_cancel(input: TokenStream) -> TokenStream {
310 let input = parse_macro_input!(input as CloseMpstCancel);
311 let output: proc_macro2::TokenStream = proc_macro2::TokenStream::from(input);
312 output.into()
313}
314
315#[proc_macro]
318pub fn choose_mpst_create_multi_to_all(input: TokenStream) -> TokenStream {
319 let input = parse_macro_input!(input as ChooseMultiCreateToAll);
320 let output: proc_macro2::TokenStream = proc_macro2::TokenStream::from(input);
321 output.into()
322}
323
324#[proc_macro]
327pub fn fork_mpst_multi_solo(input: TokenStream) -> TokenStream {
328 let input = parse_macro_input!(input as ForkMPSTMultiSolo);
329 let output: proc_macro2::TokenStream = proc_macro2::TokenStream::from(input);
330 output.into()
331}
332
333#[proc_macro]
336pub fn close_mpst_interleaved(input: TokenStream) -> TokenStream {
337 let input = parse_macro_input!(input as CloseMpstInterleaved);
338 let output: proc_macro2::TokenStream = proc_macro2::TokenStream::from(input);
339 output.into()
340}
341
342#[proc_macro]
372pub fn checking(input: TokenStream) -> TokenStream {
373 let input = parse_macro_input!(input as CheckingInput);
374 let output: proc_macro2::TokenStream = proc_macro2::TokenStream::from(input);
375 output.into()
376}
377
378#[proc_macro]
381pub fn checking_impl(input: TokenStream) -> TokenStream {
382 let input = parse_macro_input!(input as CheckingInputImpl);
383 let output: proc_macro2::TokenStream = proc_macro2::TokenStream::from(input);
384 output.into()
385}
386
387#[proc_macro]
390pub fn baking(input: TokenStream) -> TokenStream {
391 let input = parse_macro_input!(input as Baking);
392 let output: proc_macro2::TokenStream = proc_macro2::TokenStream::from(input);
393 output.into()
394}
395
396#[proc_macro]
399pub fn baking_with_enum(input: TokenStream) -> TokenStream {
400 let input = parse_macro_input!(input as BakingWithEnum);
401 let output: proc_macro2::TokenStream = proc_macro2::TokenStream::from(input);
402 output.into()
403}
404
405#[proc_macro]
408pub fn baking_with_cancel(input: TokenStream) -> TokenStream {
409 let input = parse_macro_input!(input as BakingWithCancel);
410 let output: proc_macro2::TokenStream = proc_macro2::TokenStream::from(input);
411 output.into()
412}
413
414#[proc_macro]
417pub fn baking_with_enum_and_cancel(input: TokenStream) -> TokenStream {
418 let input = parse_macro_input!(input as BakingWithEnumAndCancel);
419 let output: proc_macro2::TokenStream = proc_macro2::TokenStream::from(input);
420 output.into()
421}
422
423#[proc_macro_attribute]
426pub fn branching(args: TokenStream, input: TokenStream) -> TokenStream {
427 let mut out = input.clone();
428
429 let ty = parse_macro_input!(input as syn::Item);
430 assert!(args.is_empty());
431
432 if let Err(e) = branching_variants(ty) {
433 out.extend(TokenStream::from(e.to_compile_error()));
434 }
435 out
436}
437
438#[proc_macro]
441pub fn baking_interleaved_with_enum_and_cancel(input: TokenStream) -> TokenStream {
442 let input = parse_macro_input!(input as BakingInterleavedWithEnumAndCancel);
443 let output: proc_macro2::TokenStream = proc_macro2::TokenStream::from(input);
444 output.into()
445}
446
447#[proc_macro]
450pub fn baking_atmp_with_enum_and_cancel(input: TokenStream) -> TokenStream {
451 let input = parse_macro_input!(input as BakingATMPWithEnumAndCancel);
452 let output: proc_macro2::TokenStream = proc_macro2::TokenStream::from(input);
453 output.into()
454}
455
456#[proc_macro]
459pub fn choose_atmp_mpst_multi_to_all(input: TokenStream) -> TokenStream {
460 let input = parse_macro_input!(input as ChooseATMPMultiToAll);
461 let output: proc_macro2::TokenStream = proc_macro2::TokenStream::from(input);
462 output.into()
463}
464
465#[proc_macro]
468pub fn baking_atmp_interleaved_with_enum_and_cancel(input: TokenStream) -> TokenStream {
469 let input = parse_macro_input!(input as BakingATMPInterleavedWithEnumAndCancel);
470 let output: proc_macro2::TokenStream = proc_macro2::TokenStream::from(input);
471 output.into()
472}