mpst_seq_proc/
lib.rs

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
52/// !!! THIS MODULE DOES NOT WORK !!!
53// mod macros_http;
54
55// use macros_http::choose::choose_mpst_multi_http_to_all::ChooseTypeMultiHttpToAll;
56// use macros_http::recv::create_recv_http_session::CreateRecvHttpSession;
57// use macros_http::send::create_send_http_session::CreateSendHttpSession;
58mod 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//////////////////////////////////////
82
83#[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//////////////////////////////////////
91
92#[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//////////////////////////////////////
100
101#[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//////////////////////////////////////
109
110#[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//////////////////////////////////////
118
119#[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//////////////////////////////////////
127
128#[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//////////////////////////////////////
136
137#[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//////////////////////////////////////
145
146#[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//////////////////////////////////////
154
155#[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//////////////////////////////////////
163
164#[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//////////////////////////////////////
172
173#[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//////////////////////////////////////
181
182#[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//////////////////////////////////////
190
191#[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//////////////////////////////////////
199
200#[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//////////////////////////////////////
208
209#[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//////////////////////////////////////
217
218#[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//////////////////////////////////////
226
227#[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//////////////////////////////////////
235
236#[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//////////////////////////////////////
244
245#[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//////////////////////////////////////
253
254#[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//////////////////////////////////////
262
263#[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//////////////////////////////////////
271
272#[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//////////////////////////////////////
280
281#[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//////////////////////////////////////
289
290#[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//////////////////////////////////////
298
299#[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//////////////////////////////////////
307
308#[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//////////////////////////////////////
316
317#[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//////////////////////////////////////
325
326#[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//////////////////////////////////////
334
335#[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// //////////////////////////////////////
343
344// #[proc_macro]
345// pub fn choose_mpst_multi_http_to_all(input: TokenStream) -> TokenStream {
346//     let input = parse_macro_input!(input as ChooseTypeMultiHttpToAll);
347//     let output: proc_macro2::TokenStream = proc_macro2::TokenStream::from(input);
348//     output.into()
349// }
350
351// //////////////////////////////////////
352
353// #[proc_macro]
354// pub fn create_recv_http_session(input: TokenStream) -> TokenStream {
355//     let input = parse_macro_input!(input as CreateRecvHttpSession);
356//     let output: proc_macro2::TokenStream = proc_macro2::TokenStream::from(input);
357//     output.into()
358// }
359
360// //////////////////////////////////////
361
362// #[proc_macro]
363// pub fn create_send_http_session(input: TokenStream) -> TokenStream {
364//     let input = parse_macro_input!(input as CreateSendHttpSession);
365//     let output: proc_macro2::TokenStream = proc_macro2::TokenStream::from(input);
366//     output.into()
367// }
368
369//////////////////////////////////////
370
371#[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//////////////////////////////////////
379
380#[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//////////////////////////////////////
388
389#[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//////////////////////////////////////
397
398#[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//////////////////////////////////////
406
407#[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//////////////////////////////////////
415
416#[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//////////////////////////////////////
424
425#[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//////////////////////////////////////
439
440#[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//////////////////////////////////////
448
449#[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//////////////////////////////////////
457
458#[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//////////////////////////////////////
466
467#[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}