1use crate::{decoders::BoxDecoder, DecodeError, Decoder};
2
3macro_rules! define_map_decoder {
4 ($fn_name:ident, $struct_name:ident, $($i:ident),+) => {
5 #[allow(clippy::too_many_arguments)]
6 pub fn $fn_name<'a, F, $($i,)+ NewDecodesTo>(
7 func: F,
8 $($i: BoxDecoder<'a, $i>,)+
9 ) -> BoxDecoder<'a, NewDecodesTo>
10 where F: Fn($($i, )+) -> NewDecodesTo + 'a + Send + Sync,
11 NewDecodesTo: 'a,
12 $($i: 'a,)+
13 {
14 Box::new($struct_name {
15 func: Box::new(func),
16 decoders: (($($i, )+))
17 })
18 }
19
20 struct $struct_name<'a, DecodesTo, $($i,)+> {
21 func: Box<dyn Fn($($i,)+) -> DecodesTo + 'a + Send + Sync>,
22 decoders: ($(BoxDecoder<'a, $i>,)+ )
23 }
24
25 impl<'a, DecodesTo, $($i,)+> Decoder<'a, DecodesTo>
26 for $struct_name<'a, DecodesTo, $($i,)+> {
27 fn decode(&self, value: &serde_json::Value) -> Result<DecodesTo, DecodeError> {
28 let ($($i, )+) = &self.decoders;
29 $(
30 let $i = (*$i).decode(value)?;
31 )+
32 let result = (*self.func)($($i, )+);
33 Ok(result)
34 }
35 }
36 }
37}
38
39define_map_decoder!(map2, Fn2Decoder, _1, _2);
40define_map_decoder!(map3, Fn3Decoder, _1, _2, _3);
41define_map_decoder!(map4, Fn4Decoder, _1, _2, _3, _4);
42define_map_decoder!(map5, Fn5Decoder, _1, _2, _3, _4, _5);
43define_map_decoder!(map6, Fn6Decoder, _1, _2, _3, _4, _5, _6);
44define_map_decoder!(map7, Fn7Decoder, _1, _2, _3, _4, _5, _6, _7);
45define_map_decoder!(map8, Fn8Decoder, _1, _2, _3, _4, _5, _6, _7, _8);
46define_map_decoder!(map9, Fn9Decoder, _1, _2, _3, _4, _5, _6, _7, _8, _9);
47define_map_decoder!(map10, Fn10Decoder, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10);
48define_map_decoder!(
49 map11,
50 Fn11Decoder,
51 _1,
52 _2,
53 _3,
54 _4,
55 _5,
56 _6,
57 _7,
58 _8,
59 _9,
60 _10,
61 _11
62);
63define_map_decoder!(
64 map12,
65 Fn12Decoder,
66 _1,
67 _2,
68 _3,
69 _4,
70 _5,
71 _6,
72 _7,
73 _8,
74 _9,
75 _10,
76 _11,
77 _12
78);
79define_map_decoder!(
80 map13,
81 Fn13Decoder,
82 _1,
83 _2,
84 _3,
85 _4,
86 _5,
87 _6,
88 _7,
89 _8,
90 _9,
91 _10,
92 _11,
93 _12,
94 _13
95);
96define_map_decoder!(
97 map14,
98 Fn14Decoder,
99 _1,
100 _2,
101 _3,
102 _4,
103 _5,
104 _6,
105 _7,
106 _8,
107 _9,
108 _10,
109 _11,
110 _12,
111 _13,
112 _14
113);
114define_map_decoder!(
115 map15,
116 Fn15Decoder,
117 _1,
118 _2,
119 _3,
120 _4,
121 _5,
122 _6,
123 _7,
124 _8,
125 _9,
126 _10,
127 _11,
128 _12,
129 _13,
130 _14,
131 _15
132);
133define_map_decoder!(
134 map16,
135 Fn16Decoder,
136 _1,
137 _2,
138 _3,
139 _4,
140 _5,
141 _6,
142 _7,
143 _8,
144 _9,
145 _10,
146 _11,
147 _12,
148 _13,
149 _14,
150 _15,
151 _16
152);
153define_map_decoder!(
154 map17,
155 Fn17Decoder,
156 _1,
157 _2,
158 _3,
159 _4,
160 _5,
161 _6,
162 _7,
163 _8,
164 _9,
165 _10,
166 _11,
167 _12,
168 _13,
169 _14,
170 _15,
171 _16,
172 _17
173);
174define_map_decoder!(
175 map18,
176 Fn18Decoder,
177 _1,
178 _2,
179 _3,
180 _4,
181 _5,
182 _6,
183 _7,
184 _8,
185 _9,
186 _10,
187 _11,
188 _12,
189 _13,
190 _14,
191 _15,
192 _16,
193 _17,
194 _18
195);
196define_map_decoder!(
197 map19,
198 Fn19Decoder,
199 _1,
200 _2,
201 _3,
202 _4,
203 _5,
204 _6,
205 _7,
206 _8,
207 _9,
208 _10,
209 _11,
210 _12,
211 _13,
212 _14,
213 _15,
214 _16,
215 _17,
216 _18,
217 _19
218);
219define_map_decoder!(
220 map20,
221 Fn20Decoder,
222 _1,
223 _2,
224 _3,
225 _4,
226 _5,
227 _6,
228 _7,
229 _8,
230 _9,
231 _10,
232 _11,
233 _12,
234 _13,
235 _14,
236 _15,
237 _16,
238 _17,
239 _18,
240 _19,
241 _20
242);
243define_map_decoder!(
244 map21,
245 Fn21Decoder,
246 _1,
247 _2,
248 _3,
249 _4,
250 _5,
251 _6,
252 _7,
253 _8,
254 _9,
255 _10,
256 _11,
257 _12,
258 _13,
259 _14,
260 _15,
261 _16,
262 _17,
263 _18,
264 _19,
265 _20,
266 _21
267);
268define_map_decoder!(
269 map22,
270 Fn22Decoder,
271 _1,
272 _2,
273 _3,
274 _4,
275 _5,
276 _6,
277 _7,
278 _8,
279 _9,
280 _10,
281 _11,
282 _12,
283 _13,
284 _14,
285 _15,
286 _16,
287 _17,
288 _18,
289 _19,
290 _20,
291 _21,
292 _22
293);
294define_map_decoder!(
295 map23,
296 Fn23Decoder,
297 _1,
298 _2,
299 _3,
300 _4,
301 _5,
302 _6,
303 _7,
304 _8,
305 _9,
306 _10,
307 _11,
308 _12,
309 _13,
310 _14,
311 _15,
312 _16,
313 _17,
314 _18,
315 _19,
316 _20,
317 _21,
318 _22,
319 _23
320);
321define_map_decoder!(
322 map24,
323 Fn24Decoder,
324 _1,
325 _2,
326 _3,
327 _4,
328 _5,
329 _6,
330 _7,
331 _8,
332 _9,
333 _10,
334 _11,
335 _12,
336 _13,
337 _14,
338 _15,
339 _16,
340 _17,
341 _18,
342 _19,
343 _20,
344 _21,
345 _22,
346 _23,
347 _24
348);
349define_map_decoder!(
350 map25,
351 Fn25Decoder,
352 _1,
353 _2,
354 _3,
355 _4,
356 _5,
357 _6,
358 _7,
359 _8,
360 _9,
361 _10,
362 _11,
363 _12,
364 _13,
365 _14,
366 _15,
367 _16,
368 _17,
369 _18,
370 _19,
371 _20,
372 _21,
373 _22,
374 _23,
375 _24,
376 _25
377);
378define_map_decoder!(
379 map26,
380 Fn26Decoder,
381 _1,
382 _2,
383 _3,
384 _4,
385 _5,
386 _6,
387 _7,
388 _8,
389 _9,
390 _10,
391 _11,
392 _12,
393 _13,
394 _14,
395 _15,
396 _16,
397 _17,
398 _18,
399 _19,
400 _20,
401 _21,
402 _22,
403 _23,
404 _24,
405 _25,
406 _26
407);
408define_map_decoder!(
409 map27,
410 Fn27Decoder,
411 _1,
412 _2,
413 _3,
414 _4,
415 _5,
416 _6,
417 _7,
418 _8,
419 _9,
420 _10,
421 _11,
422 _12,
423 _13,
424 _14,
425 _15,
426 _16,
427 _17,
428 _18,
429 _19,
430 _20,
431 _21,
432 _22,
433 _23,
434 _24,
435 _25,
436 _26,
437 _27
438);
439define_map_decoder!(
440 map28,
441 Fn28Decoder,
442 _1,
443 _2,
444 _3,
445 _4,
446 _5,
447 _6,
448 _7,
449 _8,
450 _9,
451 _10,
452 _11,
453 _12,
454 _13,
455 _14,
456 _15,
457 _16,
458 _17,
459 _18,
460 _19,
461 _20,
462 _21,
463 _22,
464 _23,
465 _24,
466 _25,
467 _26,
468 _27,
469 _28
470);
471define_map_decoder!(
472 map29,
473 Fn29Decoder,
474 _1,
475 _2,
476 _3,
477 _4,
478 _5,
479 _6,
480 _7,
481 _8,
482 _9,
483 _10,
484 _11,
485 _12,
486 _13,
487 _14,
488 _15,
489 _16,
490 _17,
491 _18,
492 _19,
493 _20,
494 _21,
495 _22,
496 _23,
497 _24,
498 _25,
499 _26,
500 _27,
501 _28,
502 _29
503);
504define_map_decoder!(
505 map30,
506 Fn30Decoder,
507 _1,
508 _2,
509 _3,
510 _4,
511 _5,
512 _6,
513 _7,
514 _8,
515 _9,
516 _10,
517 _11,
518 _12,
519 _13,
520 _14,
521 _15,
522 _16,
523 _17,
524 _18,
525 _19,
526 _20,
527 _21,
528 _22,
529 _23,
530 _24,
531 _25,
532 _26,
533 _27,
534 _28,
535 _29,
536 _30
537);
538define_map_decoder!(
539 map31,
540 Fn31Decoder,
541 _1,
542 _2,
543 _3,
544 _4,
545 _5,
546 _6,
547 _7,
548 _8,
549 _9,
550 _10,
551 _11,
552 _12,
553 _13,
554 _14,
555 _15,
556 _16,
557 _17,
558 _18,
559 _19,
560 _20,
561 _21,
562 _22,
563 _23,
564 _24,
565 _25,
566 _26,
567 _27,
568 _28,
569 _29,
570 _30,
571 _31
572);
573define_map_decoder!(
574 map32,
575 Fn32Decoder,
576 _1,
577 _2,
578 _3,
579 _4,
580 _5,
581 _6,
582 _7,
583 _8,
584 _9,
585 _10,
586 _11,
587 _12,
588 _13,
589 _14,
590 _15,
591 _16,
592 _17,
593 _18,
594 _19,
595 _20,
596 _21,
597 _22,
598 _23,
599 _24,
600 _25,
601 _26,
602 _27,
603 _28,
604 _29,
605 _30,
606 _31,
607 _32
608);
609define_map_decoder!(
610 map33,
611 Fn33Decoder,
612 _1,
613 _2,
614 _3,
615 _4,
616 _5,
617 _6,
618 _7,
619 _8,
620 _9,
621 _10,
622 _11,
623 _12,
624 _13,
625 _14,
626 _15,
627 _16,
628 _17,
629 _18,
630 _19,
631 _20,
632 _21,
633 _22,
634 _23,
635 _24,
636 _25,
637 _26,
638 _27,
639 _28,
640 _29,
641 _30,
642 _31,
643 _32,
644 _33
645);
646define_map_decoder!(
647 map34,
648 Fn34Decoder,
649 _1,
650 _2,
651 _3,
652 _4,
653 _5,
654 _6,
655 _7,
656 _8,
657 _9,
658 _10,
659 _11,
660 _12,
661 _13,
662 _14,
663 _15,
664 _16,
665 _17,
666 _18,
667 _19,
668 _20,
669 _21,
670 _22,
671 _23,
672 _24,
673 _25,
674 _26,
675 _27,
676 _28,
677 _29,
678 _30,
679 _31,
680 _32,
681 _33,
682 _34
683);
684define_map_decoder!(
685 map35,
686 Fn35Decoder,
687 _1,
688 _2,
689 _3,
690 _4,
691 _5,
692 _6,
693 _7,
694 _8,
695 _9,
696 _10,
697 _11,
698 _12,
699 _13,
700 _14,
701 _15,
702 _16,
703 _17,
704 _18,
705 _19,
706 _20,
707 _21,
708 _22,
709 _23,
710 _24,
711 _25,
712 _26,
713 _27,
714 _28,
715 _29,
716 _30,
717 _31,
718 _32,
719 _33,
720 _34,
721 _35
722);
723define_map_decoder!(
724 map36,
725 Fn36Decoder,
726 _1,
727 _2,
728 _3,
729 _4,
730 _5,
731 _6,
732 _7,
733 _8,
734 _9,
735 _10,
736 _11,
737 _12,
738 _13,
739 _14,
740 _15,
741 _16,
742 _17,
743 _18,
744 _19,
745 _20,
746 _21,
747 _22,
748 _23,
749 _24,
750 _25,
751 _26,
752 _27,
753 _28,
754 _29,
755 _30,
756 _31,
757 _32,
758 _33,
759 _34,
760 _35,
761 _36
762);
763define_map_decoder!(
764 map37,
765 Fn37Decoder,
766 _1,
767 _2,
768 _3,
769 _4,
770 _5,
771 _6,
772 _7,
773 _8,
774 _9,
775 _10,
776 _11,
777 _12,
778 _13,
779 _14,
780 _15,
781 _16,
782 _17,
783 _18,
784 _19,
785 _20,
786 _21,
787 _22,
788 _23,
789 _24,
790 _25,
791 _26,
792 _27,
793 _28,
794 _29,
795 _30,
796 _31,
797 _32,
798 _33,
799 _34,
800 _35,
801 _36,
802 _37
803);
804define_map_decoder!(
805 map38,
806 Fn38Decoder,
807 _1,
808 _2,
809 _3,
810 _4,
811 _5,
812 _6,
813 _7,
814 _8,
815 _9,
816 _10,
817 _11,
818 _12,
819 _13,
820 _14,
821 _15,
822 _16,
823 _17,
824 _18,
825 _19,
826 _20,
827 _21,
828 _22,
829 _23,
830 _24,
831 _25,
832 _26,
833 _27,
834 _28,
835 _29,
836 _30,
837 _31,
838 _32,
839 _33,
840 _34,
841 _35,
842 _36,
843 _37,
844 _38
845);
846define_map_decoder!(
847 map39,
848 Fn39Decoder,
849 _1,
850 _2,
851 _3,
852 _4,
853 _5,
854 _6,
855 _7,
856 _8,
857 _9,
858 _10,
859 _11,
860 _12,
861 _13,
862 _14,
863 _15,
864 _16,
865 _17,
866 _18,
867 _19,
868 _20,
869 _21,
870 _22,
871 _23,
872 _24,
873 _25,
874 _26,
875 _27,
876 _28,
877 _29,
878 _30,
879 _31,
880 _32,
881 _33,
882 _34,
883 _35,
884 _36,
885 _37,
886 _38,
887 _39
888);
889define_map_decoder!(
890 map40,
891 Fn40Decoder,
892 _1,
893 _2,
894 _3,
895 _4,
896 _5,
897 _6,
898 _7,
899 _8,
900 _9,
901 _10,
902 _11,
903 _12,
904 _13,
905 _14,
906 _15,
907 _16,
908 _17,
909 _18,
910 _19,
911 _20,
912 _21,
913 _22,
914 _23,
915 _24,
916 _25,
917 _26,
918 _27,
919 _28,
920 _29,
921 _30,
922 _31,
923 _32,
924 _33,
925 _34,
926 _35,
927 _36,
928 _37,
929 _38,
930 _39,
931 _40
932);
933define_map_decoder!(
934 map41,
935 Fn41Decoder,
936 _1,
937 _2,
938 _3,
939 _4,
940 _5,
941 _6,
942 _7,
943 _8,
944 _9,
945 _10,
946 _11,
947 _12,
948 _13,
949 _14,
950 _15,
951 _16,
952 _17,
953 _18,
954 _19,
955 _20,
956 _21,
957 _22,
958 _23,
959 _24,
960 _25,
961 _26,
962 _27,
963 _28,
964 _29,
965 _30,
966 _31,
967 _32,
968 _33,
969 _34,
970 _35,
971 _36,
972 _37,
973 _38,
974 _39,
975 _40,
976 _41
977);
978define_map_decoder!(
979 map42,
980 Fn42Decoder,
981 _1,
982 _2,
983 _3,
984 _4,
985 _5,
986 _6,
987 _7,
988 _8,
989 _9,
990 _10,
991 _11,
992 _12,
993 _13,
994 _14,
995 _15,
996 _16,
997 _17,
998 _18,
999 _19,
1000 _20,
1001 _21,
1002 _22,
1003 _23,
1004 _24,
1005 _25,
1006 _26,
1007 _27,
1008 _28,
1009 _29,
1010 _30,
1011 _31,
1012 _32,
1013 _33,
1014 _34,
1015 _35,
1016 _36,
1017 _37,
1018 _38,
1019 _39,
1020 _40,
1021 _41,
1022 _42
1023);
1024define_map_decoder!(
1025 map43,
1026 Fn43Decoder,
1027 _1,
1028 _2,
1029 _3,
1030 _4,
1031 _5,
1032 _6,
1033 _7,
1034 _8,
1035 _9,
1036 _10,
1037 _11,
1038 _12,
1039 _13,
1040 _14,
1041 _15,
1042 _16,
1043 _17,
1044 _18,
1045 _19,
1046 _20,
1047 _21,
1048 _22,
1049 _23,
1050 _24,
1051 _25,
1052 _26,
1053 _27,
1054 _28,
1055 _29,
1056 _30,
1057 _31,
1058 _32,
1059 _33,
1060 _34,
1061 _35,
1062 _36,
1063 _37,
1064 _38,
1065 _39,
1066 _40,
1067 _41,
1068 _42,
1069 _43
1070);
1071define_map_decoder!(
1072 map44,
1073 Fn44Decoder,
1074 _1,
1075 _2,
1076 _3,
1077 _4,
1078 _5,
1079 _6,
1080 _7,
1081 _8,
1082 _9,
1083 _10,
1084 _11,
1085 _12,
1086 _13,
1087 _14,
1088 _15,
1089 _16,
1090 _17,
1091 _18,
1092 _19,
1093 _20,
1094 _21,
1095 _22,
1096 _23,
1097 _24,
1098 _25,
1099 _26,
1100 _27,
1101 _28,
1102 _29,
1103 _30,
1104 _31,
1105 _32,
1106 _33,
1107 _34,
1108 _35,
1109 _36,
1110 _37,
1111 _38,
1112 _39,
1113 _40,
1114 _41,
1115 _42,
1116 _43,
1117 _44
1118);
1119define_map_decoder!(
1120 map45,
1121 Fn45Decoder,
1122 _1,
1123 _2,
1124 _3,
1125 _4,
1126 _5,
1127 _6,
1128 _7,
1129 _8,
1130 _9,
1131 _10,
1132 _11,
1133 _12,
1134 _13,
1135 _14,
1136 _15,
1137 _16,
1138 _17,
1139 _18,
1140 _19,
1141 _20,
1142 _21,
1143 _22,
1144 _23,
1145 _24,
1146 _25,
1147 _26,
1148 _27,
1149 _28,
1150 _29,
1151 _30,
1152 _31,
1153 _32,
1154 _33,
1155 _34,
1156 _35,
1157 _36,
1158 _37,
1159 _38,
1160 _39,
1161 _40,
1162 _41,
1163 _42,
1164 _43,
1165 _44,
1166 _45
1167);
1168define_map_decoder!(
1169 map46,
1170 Fn46Decoder,
1171 _1,
1172 _2,
1173 _3,
1174 _4,
1175 _5,
1176 _6,
1177 _7,
1178 _8,
1179 _9,
1180 _10,
1181 _11,
1182 _12,
1183 _13,
1184 _14,
1185 _15,
1186 _16,
1187 _17,
1188 _18,
1189 _19,
1190 _20,
1191 _21,
1192 _22,
1193 _23,
1194 _24,
1195 _25,
1196 _26,
1197 _27,
1198 _28,
1199 _29,
1200 _30,
1201 _31,
1202 _32,
1203 _33,
1204 _34,
1205 _35,
1206 _36,
1207 _37,
1208 _38,
1209 _39,
1210 _40,
1211 _41,
1212 _42,
1213 _43,
1214 _44,
1215 _45,
1216 _46
1217);
1218define_map_decoder!(
1219 map47,
1220 Fn47Decoder,
1221 _1,
1222 _2,
1223 _3,
1224 _4,
1225 _5,
1226 _6,
1227 _7,
1228 _8,
1229 _9,
1230 _10,
1231 _11,
1232 _12,
1233 _13,
1234 _14,
1235 _15,
1236 _16,
1237 _17,
1238 _18,
1239 _19,
1240 _20,
1241 _21,
1242 _22,
1243 _23,
1244 _24,
1245 _25,
1246 _26,
1247 _27,
1248 _28,
1249 _29,
1250 _30,
1251 _31,
1252 _32,
1253 _33,
1254 _34,
1255 _35,
1256 _36,
1257 _37,
1258 _38,
1259 _39,
1260 _40,
1261 _41,
1262 _42,
1263 _43,
1264 _44,
1265 _45,
1266 _46,
1267 _47
1268);
1269define_map_decoder!(
1270 map48,
1271 Fn48Decoder,
1272 _1,
1273 _2,
1274 _3,
1275 _4,
1276 _5,
1277 _6,
1278 _7,
1279 _8,
1280 _9,
1281 _10,
1282 _11,
1283 _12,
1284 _13,
1285 _14,
1286 _15,
1287 _16,
1288 _17,
1289 _18,
1290 _19,
1291 _20,
1292 _21,
1293 _22,
1294 _23,
1295 _24,
1296 _25,
1297 _26,
1298 _27,
1299 _28,
1300 _29,
1301 _30,
1302 _31,
1303 _32,
1304 _33,
1305 _34,
1306 _35,
1307 _36,
1308 _37,
1309 _38,
1310 _39,
1311 _40,
1312 _41,
1313 _42,
1314 _43,
1315 _44,
1316 _45,
1317 _46,
1318 _47,
1319 _48
1320);
1321define_map_decoder!(
1322 map49,
1323 Fn49Decoder,
1324 _1,
1325 _2,
1326 _3,
1327 _4,
1328 _5,
1329 _6,
1330 _7,
1331 _8,
1332 _9,
1333 _10,
1334 _11,
1335 _12,
1336 _13,
1337 _14,
1338 _15,
1339 _16,
1340 _17,
1341 _18,
1342 _19,
1343 _20,
1344 _21,
1345 _22,
1346 _23,
1347 _24,
1348 _25,
1349 _26,
1350 _27,
1351 _28,
1352 _29,
1353 _30,
1354 _31,
1355 _32,
1356 _33,
1357 _34,
1358 _35,
1359 _36,
1360 _37,
1361 _38,
1362 _39,
1363 _40,
1364 _41,
1365 _42,
1366 _43,
1367 _44,
1368 _45,
1369 _46,
1370 _47,
1371 _48,
1372 _49
1373);
1374define_map_decoder!(
1375 map50,
1376 Fn50Decoder,
1377 _1,
1378 _2,
1379 _3,
1380 _4,
1381 _5,
1382 _6,
1383 _7,
1384 _8,
1385 _9,
1386 _10,
1387 _11,
1388 _12,
1389 _13,
1390 _14,
1391 _15,
1392 _16,
1393 _17,
1394 _18,
1395 _19,
1396 _20,
1397 _21,
1398 _22,
1399 _23,
1400 _24,
1401 _25,
1402 _26,
1403 _27,
1404 _28,
1405 _29,
1406 _30,
1407 _31,
1408 _32,
1409 _33,
1410 _34,
1411 _35,
1412 _36,
1413 _37,
1414 _38,
1415 _39,
1416 _40,
1417 _41,
1418 _42,
1419 _43,
1420 _44,
1421 _45,
1422 _46,
1423 _47,
1424 _48,
1425 _49,
1426 _50
1427);