json_decode/
map_fns.rs

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);