Barretenberg
The ZK-SNARK library at the core of Aztec
Loading...
Searching...
No Matches
acir.hpp
Go to the documentation of this file.
1#pragma once
2
4#include "serde.hpp"
5
6namespace Acir {
7struct Helpers {
8 static std::map<std::string, msgpack::object const*> make_kvmap(msgpack::object const& o, std::string const& name)
9 {
10 if (o.type != msgpack::type::MAP) {
11 std::cerr << o << std::endl;
12 throw_or_abort("expected MAP for " + name);
13 }
15 for (uint32_t i = 0; i < o.via.map.size; ++i) {
16 if (o.via.map.ptr[i].key.type != msgpack::type::STR) {
17 std::cerr << o << std::endl;
18 throw_or_abort("expected STR for keys of " + name);
19 }
20 kvmap.emplace(std::string(o.via.map.ptr[i].key.via.str.ptr, o.via.map.ptr[i].key.via.str.size),
21 &o.via.map.ptr[i].val);
22 }
23 return kvmap;
24 }
25
26 template <typename T>
28 std::string const& struct_name,
29 std::string const& field_name,
30 T& field,
31 bool is_optional)
32 {
33 auto it = kvmap.find(field_name);
34 if (it != kvmap.end()) {
35 try {
36 it->second->convert(field);
37 } catch (const msgpack::type_error&) {
38 std::cerr << *it->second << std::endl;
39 throw_or_abort("error converting into field " + struct_name + "::" + field_name);
40 }
41 } else if (!is_optional) {
42 throw_or_abort("missing field: " + struct_name + "::" + field_name);
43 }
44 }
45
46 template <typename T>
47 static void conv_fld_from_array(msgpack::object_array const& array,
48 std::string const& struct_name,
49 std::string const& field_name,
50 T& field,
51 uint32_t index)
52 {
53 if (index >= array.size) {
54 throw_or_abort("index out of bounds: " + struct_name + "::" + field_name + " at " + std::to_string(index));
55 }
56 auto element = array.ptr[index];
57 try {
58 element.convert(field);
59 } catch (const msgpack::type_error&) {
60 std::cerr << element << std::endl;
61 throw_or_abort("error converting into field " + struct_name + "::" + field_name);
62 }
63 }
64};
65} // namespace Acir
66
67namespace Acir {
68
70
71 struct Add {
72 friend bool operator==(const Add&, const Add&);
73
74 void msgpack_unpack(msgpack::object const& o) {}
75 };
76
77 struct Sub {
78 friend bool operator==(const Sub&, const Sub&);
79
80 void msgpack_unpack(msgpack::object const& o) {}
81 };
82
83 struct Mul {
84 friend bool operator==(const Mul&, const Mul&);
85
86 void msgpack_unpack(msgpack::object const& o) {}
87 };
88
89 struct Div {
90 friend bool operator==(const Div&, const Div&);
91
92 void msgpack_unpack(msgpack::object const& o) {}
93 };
94
95 struct IntegerDiv {
96 friend bool operator==(const IntegerDiv&, const IntegerDiv&);
97
98 void msgpack_unpack(msgpack::object const& o) {}
99 };
100
101 struct Equals {
102 friend bool operator==(const Equals&, const Equals&);
103
104 void msgpack_unpack(msgpack::object const& o) {}
105 };
106
107 struct LessThan {
108 friend bool operator==(const LessThan&, const LessThan&);
109
110 void msgpack_unpack(msgpack::object const& o) {}
111 };
112
114 friend bool operator==(const LessThanEquals&, const LessThanEquals&);
115
116 void msgpack_unpack(msgpack::object const& o) {}
117 };
118
120
121 friend bool operator==(const BinaryFieldOp&, const BinaryFieldOp&);
122
123 void msgpack_unpack(msgpack::object const& o)
124 {
125
126 if (o.type != msgpack::type::object_type::MAP && o.type != msgpack::type::object_type::STR) {
127 std::cerr << o << std::endl;
128 throw_or_abort("expected MAP or STR for enum 'BinaryFieldOp'; got type " + std::to_string(o.type));
129 }
130 if (o.type == msgpack::type::object_type::MAP && o.via.map.size != 1) {
131 throw_or_abort("expected 1 entry for enum 'BinaryFieldOp'; got " + std::to_string(o.via.map.size));
132 }
133 std::string tag;
134 try {
135 if (o.type == msgpack::type::object_type::MAP) {
136 o.via.map.ptr[0].key.convert(tag);
137 } else {
138 o.convert(tag);
139 }
140 } catch (const msgpack::type_error&) {
141 std::cerr << o << std::endl;
142 throw_or_abort("error converting tag to string for enum 'BinaryFieldOp'");
143 }
144 if (tag == "Add") {
145 Add v;
146 value = v;
147 } else if (tag == "Sub") {
148 Sub v;
149 value = v;
150 } else if (tag == "Mul") {
151 Mul v;
152 value = v;
153 } else if (tag == "Div") {
154 Div v;
155 value = v;
156 } else if (tag == "IntegerDiv") {
157 IntegerDiv v;
158 value = v;
159 } else if (tag == "Equals") {
160 Equals v;
161 value = v;
162 } else if (tag == "LessThan") {
163 LessThan v;
164 value = v;
165 } else if (tag == "LessThanEquals") {
167 value = v;
168 } else {
169 std::cerr << o << std::endl;
170 throw_or_abort("unknown 'BinaryFieldOp' enum variant: " + tag);
171 }
172 }
173};
174
176
177 struct Add {
178 friend bool operator==(const Add&, const Add&);
179
180 void msgpack_unpack(msgpack::object const& o) {}
181 };
182
183 struct Sub {
184 friend bool operator==(const Sub&, const Sub&);
185
186 void msgpack_unpack(msgpack::object const& o) {}
187 };
188
189 struct Mul {
190 friend bool operator==(const Mul&, const Mul&);
191
192 void msgpack_unpack(msgpack::object const& o) {}
193 };
194
195 struct Div {
196 friend bool operator==(const Div&, const Div&);
197
198 void msgpack_unpack(msgpack::object const& o) {}
199 };
200
201 struct Equals {
202 friend bool operator==(const Equals&, const Equals&);
203
204 void msgpack_unpack(msgpack::object const& o) {}
205 };
206
207 struct LessThan {
208 friend bool operator==(const LessThan&, const LessThan&);
209
210 void msgpack_unpack(msgpack::object const& o) {}
211 };
212
214 friend bool operator==(const LessThanEquals&, const LessThanEquals&);
215
216 void msgpack_unpack(msgpack::object const& o) {}
217 };
218
219 struct And {
220 friend bool operator==(const And&, const And&);
221
222 void msgpack_unpack(msgpack::object const& o) {}
223 };
224
225 struct Or {
226 friend bool operator==(const Or&, const Or&);
227
228 void msgpack_unpack(msgpack::object const& o) {}
229 };
230
231 struct Xor {
232 friend bool operator==(const Xor&, const Xor&);
233
234 void msgpack_unpack(msgpack::object const& o) {}
235 };
236
237 struct Shl {
238 friend bool operator==(const Shl&, const Shl&);
239
240 void msgpack_unpack(msgpack::object const& o) {}
241 };
242
243 struct Shr {
244 friend bool operator==(const Shr&, const Shr&);
245
246 void msgpack_unpack(msgpack::object const& o) {}
247 };
248
250
251 friend bool operator==(const BinaryIntOp&, const BinaryIntOp&);
252
253 void msgpack_unpack(msgpack::object const& o)
254 {
255
256 if (o.type != msgpack::type::object_type::MAP && o.type != msgpack::type::object_type::STR) {
257 std::cerr << o << std::endl;
258 throw_or_abort("expected MAP or STR for enum 'BinaryIntOp'; got type " + std::to_string(o.type));
259 }
260 if (o.type == msgpack::type::object_type::MAP && o.via.map.size != 1) {
261 throw_or_abort("expected 1 entry for enum 'BinaryIntOp'; got " + std::to_string(o.via.map.size));
262 }
263 std::string tag;
264 try {
265 if (o.type == msgpack::type::object_type::MAP) {
266 o.via.map.ptr[0].key.convert(tag);
267 } else {
268 o.convert(tag);
269 }
270 } catch (const msgpack::type_error&) {
271 std::cerr << o << std::endl;
272 throw_or_abort("error converting tag to string for enum 'BinaryIntOp'");
273 }
274 if (tag == "Add") {
275 Add v;
276 value = v;
277 } else if (tag == "Sub") {
278 Sub v;
279 value = v;
280 } else if (tag == "Mul") {
281 Mul v;
282 value = v;
283 } else if (tag == "Div") {
284 Div v;
285 value = v;
286 } else if (tag == "Equals") {
287 Equals v;
288 value = v;
289 } else if (tag == "LessThan") {
290 LessThan v;
291 value = v;
292 } else if (tag == "LessThanEquals") {
294 value = v;
295 } else if (tag == "And") {
296 And v;
297 value = v;
298 } else if (tag == "Or") {
299 Or v;
300 value = v;
301 } else if (tag == "Xor") {
302 Xor v;
303 value = v;
304 } else if (tag == "Shl") {
305 Shl v;
306 value = v;
307 } else if (tag == "Shr") {
308 Shr v;
309 value = v;
310 } else {
311 std::cerr << o << std::endl;
312 throw_or_abort("unknown 'BinaryIntOp' enum variant: " + tag);
313 }
314 }
315};
316
318
319 struct U1 {
320 friend bool operator==(const U1&, const U1&);
321
322 void msgpack_unpack(msgpack::object const& o) {}
323 };
324
325 struct U8 {
326 friend bool operator==(const U8&, const U8&);
327
328 void msgpack_unpack(msgpack::object const& o) {}
329 };
330
331 struct U16 {
332 friend bool operator==(const U16&, const U16&);
333
334 void msgpack_unpack(msgpack::object const& o) {}
335 };
336
337 struct U32 {
338 friend bool operator==(const U32&, const U32&);
339
340 void msgpack_unpack(msgpack::object const& o) {}
341 };
342
343 struct U64 {
344 friend bool operator==(const U64&, const U64&);
345
346 void msgpack_unpack(msgpack::object const& o) {}
347 };
348
349 struct U128 {
350 friend bool operator==(const U128&, const U128&);
351
352 void msgpack_unpack(msgpack::object const& o) {}
353 };
354
356
357 friend bool operator==(const IntegerBitSize&, const IntegerBitSize&);
358
359 void msgpack_unpack(msgpack::object const& o)
360 {
361
362 if (o.type != msgpack::type::object_type::MAP && o.type != msgpack::type::object_type::STR) {
363 std::cerr << o << std::endl;
364 throw_or_abort("expected MAP or STR for enum 'IntegerBitSize'; got type " + std::to_string(o.type));
365 }
366 if (o.type == msgpack::type::object_type::MAP && o.via.map.size != 1) {
367 throw_or_abort("expected 1 entry for enum 'IntegerBitSize'; got " + std::to_string(o.via.map.size));
368 }
369 std::string tag;
370 try {
371 if (o.type == msgpack::type::object_type::MAP) {
372 o.via.map.ptr[0].key.convert(tag);
373 } else {
374 o.convert(tag);
375 }
376 } catch (const msgpack::type_error&) {
377 std::cerr << o << std::endl;
378 throw_or_abort("error converting tag to string for enum 'IntegerBitSize'");
379 }
380 if (tag == "U1") {
381 U1 v;
382 value = v;
383 } else if (tag == "U8") {
384 U8 v;
385 value = v;
386 } else if (tag == "U16") {
387 U16 v;
388 value = v;
389 } else if (tag == "U32") {
390 U32 v;
391 value = v;
392 } else if (tag == "U64") {
393 U64 v;
394 value = v;
395 } else if (tag == "U128") {
396 U128 v;
397 value = v;
398 } else {
399 std::cerr << o << std::endl;
400 throw_or_abort("unknown 'IntegerBitSize' enum variant: " + tag);
401 }
402 }
403};
404
405struct BitSize {
406
407 struct Field {
408 friend bool operator==(const Field&, const Field&);
409
410 void msgpack_unpack(msgpack::object const& o) {}
411 };
412
413 struct Integer {
415
416 friend bool operator==(const Integer&, const Integer&);
417
418 void msgpack_unpack(msgpack::object const& o)
419 {
420 try {
421 o.convert(value);
422 } catch (const msgpack::type_error&) {
423 std::cerr << o << std::endl;
424 throw_or_abort("error converting into newtype 'Integer'");
425 }
426 }
427 };
428
430
431 friend bool operator==(const BitSize&, const BitSize&);
432
433 void msgpack_unpack(msgpack::object const& o)
434 {
435
436 if (o.type != msgpack::type::object_type::MAP && o.type != msgpack::type::object_type::STR) {
437 std::cerr << o << std::endl;
438 throw_or_abort("expected MAP or STR for enum 'BitSize'; got type " + std::to_string(o.type));
439 }
440 if (o.type == msgpack::type::object_type::MAP && o.via.map.size != 1) {
441 throw_or_abort("expected 1 entry for enum 'BitSize'; got " + std::to_string(o.via.map.size));
442 }
443 std::string tag;
444 try {
445 if (o.type == msgpack::type::object_type::MAP) {
446 o.via.map.ptr[0].key.convert(tag);
447 } else {
448 o.convert(tag);
449 }
450 } catch (const msgpack::type_error&) {
451 std::cerr << o << std::endl;
452 throw_or_abort("error converting tag to string for enum 'BitSize'");
453 }
454 if (tag == "Field") {
455 Field v;
456 value = v;
457 } else if (tag == "Integer") {
458 Integer v;
459 try {
460 o.via.map.ptr[0].val.convert(v);
461 } catch (const msgpack::type_error&) {
462 std::cerr << o << std::endl;
463 throw_or_abort("error converting into enum variant 'BitSize::Integer'");
464 }
465
466 value = v;
467 } else {
468 std::cerr << o << std::endl;
469 throw_or_abort("unknown 'BitSize' enum variant: " + tag);
470 }
471 }
472};
473
475
476 struct Direct {
477 uint32_t value;
478
479 friend bool operator==(const Direct&, const Direct&);
480
481 void msgpack_unpack(msgpack::object const& o)
482 {
483 try {
484 o.convert(value);
485 } catch (const msgpack::type_error&) {
486 std::cerr << o << std::endl;
487 throw_or_abort("error converting into newtype 'Direct'");
488 }
489 }
490 };
491
492 struct Relative {
493 uint32_t value;
494
495 friend bool operator==(const Relative&, const Relative&);
496
497 void msgpack_unpack(msgpack::object const& o)
498 {
499 try {
500 o.convert(value);
501 } catch (const msgpack::type_error&) {
502 std::cerr << o << std::endl;
503 throw_or_abort("error converting into newtype 'Relative'");
504 }
505 }
506 };
507
509
510 friend bool operator==(const MemoryAddress&, const MemoryAddress&);
511
512 void msgpack_unpack(msgpack::object const& o)
513 {
514
515 if (o.type != msgpack::type::object_type::MAP && o.type != msgpack::type::object_type::STR) {
516 std::cerr << o << std::endl;
517 throw_or_abort("expected MAP or STR for enum 'MemoryAddress'; got type " + std::to_string(o.type));
518 }
519 if (o.type == msgpack::type::object_type::MAP && o.via.map.size != 1) {
520 throw_or_abort("expected 1 entry for enum 'MemoryAddress'; got " + std::to_string(o.via.map.size));
521 }
522 std::string tag;
523 try {
524 if (o.type == msgpack::type::object_type::MAP) {
525 o.via.map.ptr[0].key.convert(tag);
526 } else {
527 o.convert(tag);
528 }
529 } catch (const msgpack::type_error&) {
530 std::cerr << o << std::endl;
531 throw_or_abort("error converting tag to string for enum 'MemoryAddress'");
532 }
533 if (tag == "Direct") {
534 Direct v;
535 try {
536 o.via.map.ptr[0].val.convert(v);
537 } catch (const msgpack::type_error&) {
538 std::cerr << o << std::endl;
539 throw_or_abort("error converting into enum variant 'MemoryAddress::Direct'");
540 }
541
542 value = v;
543 } else if (tag == "Relative") {
544 Relative v;
545 try {
546 o.via.map.ptr[0].val.convert(v);
547 } catch (const msgpack::type_error&) {
548 std::cerr << o << std::endl;
549 throw_or_abort("error converting into enum variant 'MemoryAddress::Relative'");
550 }
551
552 value = v;
553 } else {
554 std::cerr << o << std::endl;
555 throw_or_abort("unknown 'MemoryAddress' enum variant: " + tag);
556 }
557 }
558};
559
561 uint32_t value;
562
563 friend bool operator==(const SemiFlattenedLength&, const SemiFlattenedLength&);
564
565 void msgpack_unpack(msgpack::object const& o)
566 {
567 try {
568 o.convert(value);
569 } catch (const msgpack::type_error&) {
570 std::cerr << o << std::endl;
571 throw_or_abort("error converting into newtype 'SemiFlattenedLength'");
572 }
573 }
574};
575
576struct HeapArray {
579
580 friend bool operator==(const HeapArray&, const HeapArray&);
581
582 void msgpack_unpack(msgpack::object const& o)
583 {
584 std::string name = "HeapArray";
585 if (o.type == msgpack::type::MAP) {
586 auto kvmap = Helpers::make_kvmap(o, name);
587 Helpers::conv_fld_from_kvmap(kvmap, name, "pointer", pointer, false);
588 Helpers::conv_fld_from_kvmap(kvmap, name, "size", size, false);
589 } else if (o.type == msgpack::type::ARRAY) {
590 auto array = o.via.array;
591 Helpers::conv_fld_from_array(array, name, "pointer", pointer, 0);
592 Helpers::conv_fld_from_array(array, name, "size", size, 1);
593 } else {
594 throw_or_abort("expected MAP or ARRAY for " + name);
595 }
596 }
597};
598
600
606
607 friend bool operator==(const AES128Encrypt&, const AES128Encrypt&);
608
609 void msgpack_unpack(msgpack::object const& o)
610 {
611 std::string name = "AES128Encrypt";
612 if (o.type == msgpack::type::MAP) {
613 auto kvmap = Helpers::make_kvmap(o, name);
614 Helpers::conv_fld_from_kvmap(kvmap, name, "inputs", inputs, false);
615 Helpers::conv_fld_from_kvmap(kvmap, name, "iv", iv, false);
616 Helpers::conv_fld_from_kvmap(kvmap, name, "key", key, false);
617 Helpers::conv_fld_from_kvmap(kvmap, name, "outputs", outputs, false);
618 } else if (o.type == msgpack::type::ARRAY) {
619 auto array = o.via.array;
620 Helpers::conv_fld_from_array(array, name, "inputs", inputs, 0);
621 Helpers::conv_fld_from_array(array, name, "iv", iv, 1);
622 Helpers::conv_fld_from_array(array, name, "key", key, 2);
623 Helpers::conv_fld_from_array(array, name, "outputs", outputs, 3);
624 } else {
625 throw_or_abort("expected MAP or ARRAY for " + name);
626 }
627 }
628 };
629
630 struct Blake2s {
633
634 friend bool operator==(const Blake2s&, const Blake2s&);
635
636 void msgpack_unpack(msgpack::object const& o)
637 {
638 std::string name = "Blake2s";
639 if (o.type == msgpack::type::MAP) {
640 auto kvmap = Helpers::make_kvmap(o, name);
641 Helpers::conv_fld_from_kvmap(kvmap, name, "message", message, false);
642 Helpers::conv_fld_from_kvmap(kvmap, name, "output", output, false);
643 } else if (o.type == msgpack::type::ARRAY) {
644 auto array = o.via.array;
645 Helpers::conv_fld_from_array(array, name, "message", message, 0);
646 Helpers::conv_fld_from_array(array, name, "output", output, 1);
647 } else {
648 throw_or_abort("expected MAP or ARRAY for " + name);
649 }
650 }
651 };
652
653 struct Blake3 {
656
657 friend bool operator==(const Blake3&, const Blake3&);
658
659 void msgpack_unpack(msgpack::object const& o)
660 {
661 std::string name = "Blake3";
662 if (o.type == msgpack::type::MAP) {
663 auto kvmap = Helpers::make_kvmap(o, name);
664 Helpers::conv_fld_from_kvmap(kvmap, name, "message", message, false);
665 Helpers::conv_fld_from_kvmap(kvmap, name, "output", output, false);
666 } else if (o.type == msgpack::type::ARRAY) {
667 auto array = o.via.array;
668 Helpers::conv_fld_from_array(array, name, "message", message, 0);
669 Helpers::conv_fld_from_array(array, name, "output", output, 1);
670 } else {
671 throw_or_abort("expected MAP or ARRAY for " + name);
672 }
673 }
674 };
675
676 struct Keccakf1600 {
679
680 friend bool operator==(const Keccakf1600&, const Keccakf1600&);
681
682 void msgpack_unpack(msgpack::object const& o)
683 {
684 std::string name = "Keccakf1600";
685 if (o.type == msgpack::type::MAP) {
686 auto kvmap = Helpers::make_kvmap(o, name);
687 Helpers::conv_fld_from_kvmap(kvmap, name, "input", input, false);
688 Helpers::conv_fld_from_kvmap(kvmap, name, "output", output, false);
689 } else if (o.type == msgpack::type::ARRAY) {
690 auto array = o.via.array;
691 Helpers::conv_fld_from_array(array, name, "input", input, 0);
692 Helpers::conv_fld_from_array(array, name, "output", output, 1);
693 } else {
694 throw_or_abort("expected MAP or ARRAY for " + name);
695 }
696 }
697 };
698
705
706 friend bool operator==(const EcdsaSecp256k1&, const EcdsaSecp256k1&);
707
708 void msgpack_unpack(msgpack::object const& o)
709 {
710 std::string name = "EcdsaSecp256k1";
711 if (o.type == msgpack::type::MAP) {
712 auto kvmap = Helpers::make_kvmap(o, name);
713 Helpers::conv_fld_from_kvmap(kvmap, name, "hashed_msg", hashed_msg, false);
714 Helpers::conv_fld_from_kvmap(kvmap, name, "public_key_x", public_key_x, false);
715 Helpers::conv_fld_from_kvmap(kvmap, name, "public_key_y", public_key_y, false);
716 Helpers::conv_fld_from_kvmap(kvmap, name, "signature", signature, false);
717 Helpers::conv_fld_from_kvmap(kvmap, name, "result", result, false);
718 } else if (o.type == msgpack::type::ARRAY) {
719 auto array = o.via.array;
720 Helpers::conv_fld_from_array(array, name, "hashed_msg", hashed_msg, 0);
721 Helpers::conv_fld_from_array(array, name, "public_key_x", public_key_x, 1);
722 Helpers::conv_fld_from_array(array, name, "public_key_y", public_key_y, 2);
723 Helpers::conv_fld_from_array(array, name, "signature", signature, 3);
724 Helpers::conv_fld_from_array(array, name, "result", result, 4);
725 } else {
726 throw_or_abort("expected MAP or ARRAY for " + name);
727 }
728 }
729 };
730
737
738 friend bool operator==(const EcdsaSecp256r1&, const EcdsaSecp256r1&);
739
740 void msgpack_unpack(msgpack::object const& o)
741 {
742 std::string name = "EcdsaSecp256r1";
743 if (o.type == msgpack::type::MAP) {
744 auto kvmap = Helpers::make_kvmap(o, name);
745 Helpers::conv_fld_from_kvmap(kvmap, name, "hashed_msg", hashed_msg, false);
746 Helpers::conv_fld_from_kvmap(kvmap, name, "public_key_x", public_key_x, false);
747 Helpers::conv_fld_from_kvmap(kvmap, name, "public_key_y", public_key_y, false);
748 Helpers::conv_fld_from_kvmap(kvmap, name, "signature", signature, false);
749 Helpers::conv_fld_from_kvmap(kvmap, name, "result", result, false);
750 } else if (o.type == msgpack::type::ARRAY) {
751 auto array = o.via.array;
752 Helpers::conv_fld_from_array(array, name, "hashed_msg", hashed_msg, 0);
753 Helpers::conv_fld_from_array(array, name, "public_key_x", public_key_x, 1);
754 Helpers::conv_fld_from_array(array, name, "public_key_y", public_key_y, 2);
755 Helpers::conv_fld_from_array(array, name, "signature", signature, 3);
756 Helpers::conv_fld_from_array(array, name, "result", result, 4);
757 } else {
758 throw_or_abort("expected MAP or ARRAY for " + name);
759 }
760 }
761 };
762
767
768 friend bool operator==(const MultiScalarMul&, const MultiScalarMul&);
769
770 void msgpack_unpack(msgpack::object const& o)
771 {
772 std::string name = "MultiScalarMul";
773 if (o.type == msgpack::type::MAP) {
774 auto kvmap = Helpers::make_kvmap(o, name);
775 Helpers::conv_fld_from_kvmap(kvmap, name, "points", points, false);
776 Helpers::conv_fld_from_kvmap(kvmap, name, "scalars", scalars, false);
777 Helpers::conv_fld_from_kvmap(kvmap, name, "outputs", outputs, false);
778 } else if (o.type == msgpack::type::ARRAY) {
779 auto array = o.via.array;
780 Helpers::conv_fld_from_array(array, name, "points", points, 0);
781 Helpers::conv_fld_from_array(array, name, "scalars", scalars, 1);
782 Helpers::conv_fld_from_array(array, name, "outputs", outputs, 2);
783 } else {
784 throw_or_abort("expected MAP or ARRAY for " + name);
785 }
786 }
787 };
788
797
798 friend bool operator==(const EmbeddedCurveAdd&, const EmbeddedCurveAdd&);
799
800 void msgpack_unpack(msgpack::object const& o)
801 {
802 std::string name = "EmbeddedCurveAdd";
803 if (o.type == msgpack::type::MAP) {
804 auto kvmap = Helpers::make_kvmap(o, name);
805 Helpers::conv_fld_from_kvmap(kvmap, name, "input1_x", input1_x, false);
806 Helpers::conv_fld_from_kvmap(kvmap, name, "input1_y", input1_y, false);
807 Helpers::conv_fld_from_kvmap(kvmap, name, "input1_infinite", input1_infinite, false);
808 Helpers::conv_fld_from_kvmap(kvmap, name, "input2_x", input2_x, false);
809 Helpers::conv_fld_from_kvmap(kvmap, name, "input2_y", input2_y, false);
810 Helpers::conv_fld_from_kvmap(kvmap, name, "input2_infinite", input2_infinite, false);
811 Helpers::conv_fld_from_kvmap(kvmap, name, "result", result, false);
812 } else if (o.type == msgpack::type::ARRAY) {
813 auto array = o.via.array;
814 Helpers::conv_fld_from_array(array, name, "input1_x", input1_x, 0);
815 Helpers::conv_fld_from_array(array, name, "input1_y", input1_y, 1);
816 Helpers::conv_fld_from_array(array, name, "input1_infinite", input1_infinite, 2);
817 Helpers::conv_fld_from_array(array, name, "input2_x", input2_x, 3);
818 Helpers::conv_fld_from_array(array, name, "input2_y", input2_y, 4);
819 Helpers::conv_fld_from_array(array, name, "input2_infinite", input2_infinite, 5);
820 Helpers::conv_fld_from_array(array, name, "result", result, 6);
821 } else {
822 throw_or_abort("expected MAP or ARRAY for " + name);
823 }
824 }
825 };
826
830
831 friend bool operator==(const Poseidon2Permutation&, const Poseidon2Permutation&);
832
833 void msgpack_unpack(msgpack::object const& o)
834 {
835 std::string name = "Poseidon2Permutation";
836 if (o.type == msgpack::type::MAP) {
837 auto kvmap = Helpers::make_kvmap(o, name);
838 Helpers::conv_fld_from_kvmap(kvmap, name, "message", message, false);
839 Helpers::conv_fld_from_kvmap(kvmap, name, "output", output, false);
840 } else if (o.type == msgpack::type::ARRAY) {
841 auto array = o.via.array;
842 Helpers::conv_fld_from_array(array, name, "message", message, 0);
843 Helpers::conv_fld_from_array(array, name, "output", output, 1);
844 } else {
845 throw_or_abort("expected MAP or ARRAY for " + name);
846 }
847 }
848 };
849
854
855 friend bool operator==(const Sha256Compression&, const Sha256Compression&);
856
857 void msgpack_unpack(msgpack::object const& o)
858 {
859 std::string name = "Sha256Compression";
860 if (o.type == msgpack::type::MAP) {
861 auto kvmap = Helpers::make_kvmap(o, name);
862 Helpers::conv_fld_from_kvmap(kvmap, name, "input", input, false);
863 Helpers::conv_fld_from_kvmap(kvmap, name, "hash_values", hash_values, false);
864 Helpers::conv_fld_from_kvmap(kvmap, name, "output", output, false);
865 } else if (o.type == msgpack::type::ARRAY) {
866 auto array = o.via.array;
867 Helpers::conv_fld_from_array(array, name, "input", input, 0);
868 Helpers::conv_fld_from_array(array, name, "hash_values", hash_values, 1);
869 Helpers::conv_fld_from_array(array, name, "output", output, 2);
870 } else {
871 throw_or_abort("expected MAP or ARRAY for " + name);
872 }
873 }
874 };
875
876 struct ToRadix {
882
883 friend bool operator==(const ToRadix&, const ToRadix&);
884
885 void msgpack_unpack(msgpack::object const& o)
886 {
887 std::string name = "ToRadix";
888 if (o.type == msgpack::type::MAP) {
889 auto kvmap = Helpers::make_kvmap(o, name);
890 Helpers::conv_fld_from_kvmap(kvmap, name, "input", input, false);
891 Helpers::conv_fld_from_kvmap(kvmap, name, "radix", radix, false);
892 Helpers::conv_fld_from_kvmap(kvmap, name, "output_pointer", output_pointer, false);
893 Helpers::conv_fld_from_kvmap(kvmap, name, "num_limbs", num_limbs, false);
894 Helpers::conv_fld_from_kvmap(kvmap, name, "output_bits", output_bits, false);
895 } else if (o.type == msgpack::type::ARRAY) {
896 auto array = o.via.array;
897 Helpers::conv_fld_from_array(array, name, "input", input, 0);
898 Helpers::conv_fld_from_array(array, name, "radix", radix, 1);
899 Helpers::conv_fld_from_array(array, name, "output_pointer", output_pointer, 2);
900 Helpers::conv_fld_from_array(array, name, "num_limbs", num_limbs, 3);
901 Helpers::conv_fld_from_array(array, name, "output_bits", output_bits, 4);
902 } else {
903 throw_or_abort("expected MAP or ARRAY for " + name);
904 }
905 }
906 };
907
908 std::variant<AES128Encrypt,
909 Blake2s,
910 Blake3,
911 Keccakf1600,
912 EcdsaSecp256k1,
913 EcdsaSecp256r1,
914 MultiScalarMul,
915 EmbeddedCurveAdd,
916 Poseidon2Permutation,
917 Sha256Compression,
918 ToRadix>
920
921 friend bool operator==(const BlackBoxOp&, const BlackBoxOp&);
922
923 void msgpack_unpack(msgpack::object const& o)
924 {
925
926 if (o.type != msgpack::type::object_type::MAP && o.type != msgpack::type::object_type::STR) {
927 std::cerr << o << std::endl;
928 throw_or_abort("expected MAP or STR for enum 'BlackBoxOp'; got type " + std::to_string(o.type));
929 }
930 if (o.type == msgpack::type::object_type::MAP && o.via.map.size != 1) {
931 throw_or_abort("expected 1 entry for enum 'BlackBoxOp'; got " + std::to_string(o.via.map.size));
932 }
933 std::string tag;
934 try {
935 if (o.type == msgpack::type::object_type::MAP) {
936 o.via.map.ptr[0].key.convert(tag);
937 } else {
938 o.convert(tag);
939 }
940 } catch (const msgpack::type_error&) {
941 std::cerr << o << std::endl;
942 throw_or_abort("error converting tag to string for enum 'BlackBoxOp'");
943 }
944 if (tag == "AES128Encrypt") {
946 try {
947 o.via.map.ptr[0].val.convert(v);
948 } catch (const msgpack::type_error&) {
949 std::cerr << o << std::endl;
950 throw_or_abort("error converting into enum variant 'BlackBoxOp::AES128Encrypt'");
951 }
952
953 value = v;
954 } else if (tag == "Blake2s") {
955 Blake2s v;
956 try {
957 o.via.map.ptr[0].val.convert(v);
958 } catch (const msgpack::type_error&) {
959 std::cerr << o << std::endl;
960 throw_or_abort("error converting into enum variant 'BlackBoxOp::Blake2s'");
961 }
962
963 value = v;
964 } else if (tag == "Blake3") {
965 Blake3 v;
966 try {
967 o.via.map.ptr[0].val.convert(v);
968 } catch (const msgpack::type_error&) {
969 std::cerr << o << std::endl;
970 throw_or_abort("error converting into enum variant 'BlackBoxOp::Blake3'");
971 }
972
973 value = v;
974 } else if (tag == "Keccakf1600") {
975 Keccakf1600 v;
976 try {
977 o.via.map.ptr[0].val.convert(v);
978 } catch (const msgpack::type_error&) {
979 std::cerr << o << std::endl;
980 throw_or_abort("error converting into enum variant 'BlackBoxOp::Keccakf1600'");
981 }
982
983 value = v;
984 } else if (tag == "EcdsaSecp256k1") {
986 try {
987 o.via.map.ptr[0].val.convert(v);
988 } catch (const msgpack::type_error&) {
989 std::cerr << o << std::endl;
990 throw_or_abort("error converting into enum variant 'BlackBoxOp::EcdsaSecp256k1'");
991 }
992
993 value = v;
994 } else if (tag == "EcdsaSecp256r1") {
996 try {
997 o.via.map.ptr[0].val.convert(v);
998 } catch (const msgpack::type_error&) {
999 std::cerr << o << std::endl;
1000 throw_or_abort("error converting into enum variant 'BlackBoxOp::EcdsaSecp256r1'");
1001 }
1002
1003 value = v;
1004 } else if (tag == "MultiScalarMul") {
1006 try {
1007 o.via.map.ptr[0].val.convert(v);
1008 } catch (const msgpack::type_error&) {
1009 std::cerr << o << std::endl;
1010 throw_or_abort("error converting into enum variant 'BlackBoxOp::MultiScalarMul'");
1011 }
1012
1013 value = v;
1014 } else if (tag == "EmbeddedCurveAdd") {
1016 try {
1017 o.via.map.ptr[0].val.convert(v);
1018 } catch (const msgpack::type_error&) {
1019 std::cerr << o << std::endl;
1020 throw_or_abort("error converting into enum variant 'BlackBoxOp::EmbeddedCurveAdd'");
1021 }
1022
1023 value = v;
1024 } else if (tag == "Poseidon2Permutation") {
1026 try {
1027 o.via.map.ptr[0].val.convert(v);
1028 } catch (const msgpack::type_error&) {
1029 std::cerr << o << std::endl;
1030 throw_or_abort("error converting into enum variant 'BlackBoxOp::Poseidon2Permutation'");
1031 }
1032
1033 value = v;
1034 } else if (tag == "Sha256Compression") {
1036 try {
1037 o.via.map.ptr[0].val.convert(v);
1038 } catch (const msgpack::type_error&) {
1039 std::cerr << o << std::endl;
1040 throw_or_abort("error converting into enum variant 'BlackBoxOp::Sha256Compression'");
1041 }
1042
1043 value = v;
1044 } else if (tag == "ToRadix") {
1045 ToRadix v;
1046 try {
1047 o.via.map.ptr[0].val.convert(v);
1048 } catch (const msgpack::type_error&) {
1049 std::cerr << o << std::endl;
1050 throw_or_abort("error converting into enum variant 'BlackBoxOp::ToRadix'");
1051 }
1052
1053 value = v;
1054 } else {
1055 std::cerr << o << std::endl;
1056 throw_or_abort("unknown 'BlackBoxOp' enum variant: " + tag);
1057 }
1058 }
1059};
1060
1062 uint32_t value;
1063
1064 friend bool operator==(const SemanticLength&, const SemanticLength&);
1065
1066 void msgpack_unpack(msgpack::object const& o)
1067 {
1068 try {
1069 o.convert(value);
1070 } catch (const msgpack::type_error&) {
1071 std::cerr << o << std::endl;
1072 throw_or_abort("error converting into newtype 'SemanticLength'");
1073 }
1074 }
1075};
1076
1077struct HeapValueType;
1078
1080
1081 struct Simple {
1083
1084 friend bool operator==(const Simple&, const Simple&);
1085
1086 void msgpack_unpack(msgpack::object const& o)
1087 {
1088 try {
1089 o.convert(value);
1090 } catch (const msgpack::type_error&) {
1091 std::cerr << o << std::endl;
1092 throw_or_abort("error converting into newtype 'Simple'");
1093 }
1094 }
1095 };
1096
1097 struct Array {
1098 std::vector<Acir::HeapValueType> value_types;
1100
1101 friend bool operator==(const Array&, const Array&);
1102
1103 void msgpack_unpack(msgpack::object const& o)
1104 {
1105 std::string name = "Array";
1106 if (o.type == msgpack::type::MAP) {
1107 auto kvmap = Helpers::make_kvmap(o, name);
1108 Helpers::conv_fld_from_kvmap(kvmap, name, "value_types", value_types, false);
1109 Helpers::conv_fld_from_kvmap(kvmap, name, "size", size, false);
1110 } else if (o.type == msgpack::type::ARRAY) {
1111 auto array = o.via.array;
1112 Helpers::conv_fld_from_array(array, name, "value_types", value_types, 0);
1113 Helpers::conv_fld_from_array(array, name, "size", size, 1);
1114 } else {
1115 throw_or_abort("expected MAP or ARRAY for " + name);
1116 }
1117 }
1118 };
1119
1120 struct Vector {
1121 std::vector<Acir::HeapValueType> value_types;
1122
1123 friend bool operator==(const Vector&, const Vector&);
1124
1125 void msgpack_unpack(msgpack::object const& o)
1126 {
1127 std::string name = "Vector";
1128 if (o.type == msgpack::type::MAP) {
1129 auto kvmap = Helpers::make_kvmap(o, name);
1130 Helpers::conv_fld_from_kvmap(kvmap, name, "value_types", value_types, false);
1131 } else if (o.type == msgpack::type::ARRAY) {
1132 auto array = o.via.array;
1133 Helpers::conv_fld_from_array(array, name, "value_types", value_types, 0);
1134 } else {
1135 throw_or_abort("expected MAP or ARRAY for " + name);
1136 }
1137 }
1138 };
1139
1141
1142 friend bool operator==(const HeapValueType&, const HeapValueType&);
1143
1144 void msgpack_unpack(msgpack::object const& o)
1145 {
1146
1147 if (o.type != msgpack::type::object_type::MAP && o.type != msgpack::type::object_type::STR) {
1148 std::cerr << o << std::endl;
1149 throw_or_abort("expected MAP or STR for enum 'HeapValueType'; got type " + std::to_string(o.type));
1150 }
1151 if (o.type == msgpack::type::object_type::MAP && o.via.map.size != 1) {
1152 throw_or_abort("expected 1 entry for enum 'HeapValueType'; got " + std::to_string(o.via.map.size));
1153 }
1154 std::string tag;
1155 try {
1156 if (o.type == msgpack::type::object_type::MAP) {
1157 o.via.map.ptr[0].key.convert(tag);
1158 } else {
1159 o.convert(tag);
1160 }
1161 } catch (const msgpack::type_error&) {
1162 std::cerr << o << std::endl;
1163 throw_or_abort("error converting tag to string for enum 'HeapValueType'");
1164 }
1165 if (tag == "Simple") {
1166 Simple v;
1167 try {
1168 o.via.map.ptr[0].val.convert(v);
1169 } catch (const msgpack::type_error&) {
1170 std::cerr << o << std::endl;
1171 throw_or_abort("error converting into enum variant 'HeapValueType::Simple'");
1172 }
1173
1174 value = v;
1175 } else if (tag == "Array") {
1176 Array v;
1177 try {
1178 o.via.map.ptr[0].val.convert(v);
1179 } catch (const msgpack::type_error&) {
1180 std::cerr << o << std::endl;
1181 throw_or_abort("error converting into enum variant 'HeapValueType::Array'");
1182 }
1183
1184 value = v;
1185 } else if (tag == "Vector") {
1186 Vector v;
1187 try {
1188 o.via.map.ptr[0].val.convert(v);
1189 } catch (const msgpack::type_error&) {
1190 std::cerr << o << std::endl;
1191 throw_or_abort("error converting into enum variant 'HeapValueType::Vector'");
1192 }
1193
1194 value = v;
1195 } else {
1196 std::cerr << o << std::endl;
1197 throw_or_abort("unknown 'HeapValueType' enum variant: " + tag);
1198 }
1199 }
1200};
1201
1205
1206 friend bool operator==(const HeapVector&, const HeapVector&);
1207
1208 void msgpack_unpack(msgpack::object const& o)
1209 {
1210 std::string name = "HeapVector";
1211 if (o.type == msgpack::type::MAP) {
1212 auto kvmap = Helpers::make_kvmap(o, name);
1213 Helpers::conv_fld_from_kvmap(kvmap, name, "pointer", pointer, false);
1214 Helpers::conv_fld_from_kvmap(kvmap, name, "size", size, false);
1215 } else if (o.type == msgpack::type::ARRAY) {
1216 auto array = o.via.array;
1217 Helpers::conv_fld_from_array(array, name, "pointer", pointer, 0);
1218 Helpers::conv_fld_from_array(array, name, "size", size, 1);
1219 } else {
1220 throw_or_abort("expected MAP or ARRAY for " + name);
1221 }
1222 }
1223};
1224
1226
1229
1230 friend bool operator==(const MemoryAddress&, const MemoryAddress&);
1231
1232 void msgpack_unpack(msgpack::object const& o)
1233 {
1234 try {
1235 o.convert(value);
1236 } catch (const msgpack::type_error&) {
1237 std::cerr << o << std::endl;
1238 throw_or_abort("error converting into newtype 'MemoryAddress'");
1239 }
1240 }
1241 };
1242
1243 struct HeapArray {
1245
1246 friend bool operator==(const HeapArray&, const HeapArray&);
1247
1248 void msgpack_unpack(msgpack::object const& o)
1249 {
1250 try {
1251 o.convert(value);
1252 } catch (const msgpack::type_error&) {
1253 std::cerr << o << std::endl;
1254 throw_or_abort("error converting into newtype 'HeapArray'");
1255 }
1256 }
1257 };
1258
1259 struct HeapVector {
1261
1262 friend bool operator==(const HeapVector&, const HeapVector&);
1263
1264 void msgpack_unpack(msgpack::object const& o)
1265 {
1266 try {
1267 o.convert(value);
1268 } catch (const msgpack::type_error&) {
1269 std::cerr << o << std::endl;
1270 throw_or_abort("error converting into newtype 'HeapVector'");
1271 }
1272 }
1273 };
1274
1276
1277 friend bool operator==(const ValueOrArray&, const ValueOrArray&);
1278
1279 void msgpack_unpack(msgpack::object const& o)
1280 {
1281
1282 if (o.type != msgpack::type::object_type::MAP && o.type != msgpack::type::object_type::STR) {
1283 std::cerr << o << std::endl;
1284 throw_or_abort("expected MAP or STR for enum 'ValueOrArray'; got type " + std::to_string(o.type));
1285 }
1286 if (o.type == msgpack::type::object_type::MAP && o.via.map.size != 1) {
1287 throw_or_abort("expected 1 entry for enum 'ValueOrArray'; got " + std::to_string(o.via.map.size));
1288 }
1289 std::string tag;
1290 try {
1291 if (o.type == msgpack::type::object_type::MAP) {
1292 o.via.map.ptr[0].key.convert(tag);
1293 } else {
1294 o.convert(tag);
1295 }
1296 } catch (const msgpack::type_error&) {
1297 std::cerr << o << std::endl;
1298 throw_or_abort("error converting tag to string for enum 'ValueOrArray'");
1299 }
1300 if (tag == "MemoryAddress") {
1301 MemoryAddress v;
1302 try {
1303 o.via.map.ptr[0].val.convert(v);
1304 } catch (const msgpack::type_error&) {
1305 std::cerr << o << std::endl;
1306 throw_or_abort("error converting into enum variant 'ValueOrArray::MemoryAddress'");
1307 }
1308
1309 value = v;
1310 } else if (tag == "HeapArray") {
1311 HeapArray v;
1312 try {
1313 o.via.map.ptr[0].val.convert(v);
1314 } catch (const msgpack::type_error&) {
1315 std::cerr << o << std::endl;
1316 throw_or_abort("error converting into enum variant 'ValueOrArray::HeapArray'");
1317 }
1318
1319 value = v;
1320 } else if (tag == "HeapVector") {
1321 HeapVector v;
1322 try {
1323 o.via.map.ptr[0].val.convert(v);
1324 } catch (const msgpack::type_error&) {
1325 std::cerr << o << std::endl;
1326 throw_or_abort("error converting into enum variant 'ValueOrArray::HeapVector'");
1327 }
1328
1329 value = v;
1330 } else {
1331 std::cerr << o << std::endl;
1332 throw_or_abort("unknown 'ValueOrArray' enum variant: " + tag);
1333 }
1334 }
1335};
1336
1338
1344
1345 friend bool operator==(const BinaryFieldOp&, const BinaryFieldOp&);
1346
1347 void msgpack_unpack(msgpack::object const& o)
1348 {
1349 std::string name = "BinaryFieldOp";
1350 if (o.type == msgpack::type::MAP) {
1351 auto kvmap = Helpers::make_kvmap(o, name);
1352 Helpers::conv_fld_from_kvmap(kvmap, name, "destination", destination, false);
1353 Helpers::conv_fld_from_kvmap(kvmap, name, "op", op, false);
1354 Helpers::conv_fld_from_kvmap(kvmap, name, "lhs", lhs, false);
1355 Helpers::conv_fld_from_kvmap(kvmap, name, "rhs", rhs, false);
1356 } else if (o.type == msgpack::type::ARRAY) {
1357 auto array = o.via.array;
1358 Helpers::conv_fld_from_array(array, name, "destination", destination, 0);
1359 Helpers::conv_fld_from_array(array, name, "op", op, 1);
1360 Helpers::conv_fld_from_array(array, name, "lhs", lhs, 2);
1361 Helpers::conv_fld_from_array(array, name, "rhs", rhs, 3);
1362 } else {
1363 throw_or_abort("expected MAP or ARRAY for " + name);
1364 }
1365 }
1366 };
1367
1374
1375 friend bool operator==(const BinaryIntOp&, const BinaryIntOp&);
1376
1377 void msgpack_unpack(msgpack::object const& o)
1378 {
1379 std::string name = "BinaryIntOp";
1380 if (o.type == msgpack::type::MAP) {
1381 auto kvmap = Helpers::make_kvmap(o, name);
1382 Helpers::conv_fld_from_kvmap(kvmap, name, "destination", destination, false);
1383 Helpers::conv_fld_from_kvmap(kvmap, name, "op", op, false);
1384 Helpers::conv_fld_from_kvmap(kvmap, name, "bit_size", bit_size, false);
1385 Helpers::conv_fld_from_kvmap(kvmap, name, "lhs", lhs, false);
1386 Helpers::conv_fld_from_kvmap(kvmap, name, "rhs", rhs, false);
1387 } else if (o.type == msgpack::type::ARRAY) {
1388 auto array = o.via.array;
1389 Helpers::conv_fld_from_array(array, name, "destination", destination, 0);
1390 Helpers::conv_fld_from_array(array, name, "op", op, 1);
1391 Helpers::conv_fld_from_array(array, name, "bit_size", bit_size, 2);
1392 Helpers::conv_fld_from_array(array, name, "lhs", lhs, 3);
1393 Helpers::conv_fld_from_array(array, name, "rhs", rhs, 4);
1394 } else {
1395 throw_or_abort("expected MAP or ARRAY for " + name);
1396 }
1397 }
1398 };
1399
1400 struct Not {
1404
1405 friend bool operator==(const Not&, const Not&);
1406
1407 void msgpack_unpack(msgpack::object const& o)
1408 {
1409 std::string name = "Not";
1410 if (o.type == msgpack::type::MAP) {
1411 auto kvmap = Helpers::make_kvmap(o, name);
1412 Helpers::conv_fld_from_kvmap(kvmap, name, "destination", destination, false);
1413 Helpers::conv_fld_from_kvmap(kvmap, name, "source", source, false);
1414 Helpers::conv_fld_from_kvmap(kvmap, name, "bit_size", bit_size, false);
1415 } else if (o.type == msgpack::type::ARRAY) {
1416 auto array = o.via.array;
1417 Helpers::conv_fld_from_array(array, name, "destination", destination, 0);
1418 Helpers::conv_fld_from_array(array, name, "source", source, 1);
1419 Helpers::conv_fld_from_array(array, name, "bit_size", bit_size, 2);
1420 } else {
1421 throw_or_abort("expected MAP or ARRAY for " + name);
1422 }
1423 }
1424 };
1425
1426 struct Cast {
1430
1431 friend bool operator==(const Cast&, const Cast&);
1432
1433 void msgpack_unpack(msgpack::object const& o)
1434 {
1435 std::string name = "Cast";
1436 if (o.type == msgpack::type::MAP) {
1437 auto kvmap = Helpers::make_kvmap(o, name);
1438 Helpers::conv_fld_from_kvmap(kvmap, name, "destination", destination, false);
1439 Helpers::conv_fld_from_kvmap(kvmap, name, "source", source, false);
1440 Helpers::conv_fld_from_kvmap(kvmap, name, "bit_size", bit_size, false);
1441 } else if (o.type == msgpack::type::ARRAY) {
1442 auto array = o.via.array;
1443 Helpers::conv_fld_from_array(array, name, "destination", destination, 0);
1444 Helpers::conv_fld_from_array(array, name, "source", source, 1);
1445 Helpers::conv_fld_from_array(array, name, "bit_size", bit_size, 2);
1446 } else {
1447 throw_or_abort("expected MAP or ARRAY for " + name);
1448 }
1449 }
1450 };
1451
1452 struct JumpIf {
1454 uint64_t location;
1455
1456 friend bool operator==(const JumpIf&, const JumpIf&);
1457
1458 void msgpack_unpack(msgpack::object const& o)
1459 {
1460 std::string name = "JumpIf";
1461 if (o.type == msgpack::type::MAP) {
1462 auto kvmap = Helpers::make_kvmap(o, name);
1463 Helpers::conv_fld_from_kvmap(kvmap, name, "condition", condition, false);
1464 Helpers::conv_fld_from_kvmap(kvmap, name, "location", location, false);
1465 } else if (o.type == msgpack::type::ARRAY) {
1466 auto array = o.via.array;
1467 Helpers::conv_fld_from_array(array, name, "condition", condition, 0);
1468 Helpers::conv_fld_from_array(array, name, "location", location, 1);
1469 } else {
1470 throw_or_abort("expected MAP or ARRAY for " + name);
1471 }
1472 }
1473 };
1474
1475 struct Jump {
1476 uint64_t location;
1477
1478 friend bool operator==(const Jump&, const Jump&);
1479
1480 void msgpack_unpack(msgpack::object const& o)
1481 {
1482 std::string name = "Jump";
1483 if (o.type == msgpack::type::MAP) {
1484 auto kvmap = Helpers::make_kvmap(o, name);
1485 Helpers::conv_fld_from_kvmap(kvmap, name, "location", location, false);
1486 } else if (o.type == msgpack::type::ARRAY) {
1487 auto array = o.via.array;
1488 Helpers::conv_fld_from_array(array, name, "location", location, 0);
1489 } else {
1490 throw_or_abort("expected MAP or ARRAY for " + name);
1491 }
1492 }
1493 };
1494
1499
1500 friend bool operator==(const CalldataCopy&, const CalldataCopy&);
1501
1502 void msgpack_unpack(msgpack::object const& o)
1503 {
1504 std::string name = "CalldataCopy";
1505 if (o.type == msgpack::type::MAP) {
1506 auto kvmap = Helpers::make_kvmap(o, name);
1507 Helpers::conv_fld_from_kvmap(kvmap, name, "destination_address", destination_address, false);
1508 Helpers::conv_fld_from_kvmap(kvmap, name, "size_address", size_address, false);
1509 Helpers::conv_fld_from_kvmap(kvmap, name, "offset_address", offset_address, false);
1510 } else if (o.type == msgpack::type::ARRAY) {
1511 auto array = o.via.array;
1512 Helpers::conv_fld_from_array(array, name, "destination_address", destination_address, 0);
1513 Helpers::conv_fld_from_array(array, name, "size_address", size_address, 1);
1514 Helpers::conv_fld_from_array(array, name, "offset_address", offset_address, 2);
1515 } else {
1516 throw_or_abort("expected MAP or ARRAY for " + name);
1517 }
1518 }
1519 };
1520
1521 struct Call {
1522 uint64_t location;
1523
1524 friend bool operator==(const Call&, const Call&);
1525
1526 void msgpack_unpack(msgpack::object const& o)
1527 {
1528 std::string name = "Call";
1529 if (o.type == msgpack::type::MAP) {
1530 auto kvmap = Helpers::make_kvmap(o, name);
1531 Helpers::conv_fld_from_kvmap(kvmap, name, "location", location, false);
1532 } else if (o.type == msgpack::type::ARRAY) {
1533 auto array = o.via.array;
1534 Helpers::conv_fld_from_array(array, name, "location", location, 0);
1535 } else {
1536 throw_or_abort("expected MAP or ARRAY for " + name);
1537 }
1538 }
1539 };
1540
1541 struct Const {
1544 std::vector<uint8_t> value;
1545
1546 friend bool operator==(const Const&, const Const&);
1547
1548 void msgpack_unpack(msgpack::object const& o)
1549 {
1550 std::string name = "Const";
1551 if (o.type == msgpack::type::MAP) {
1552 auto kvmap = Helpers::make_kvmap(o, name);
1553 Helpers::conv_fld_from_kvmap(kvmap, name, "destination", destination, false);
1554 Helpers::conv_fld_from_kvmap(kvmap, name, "bit_size", bit_size, false);
1555 Helpers::conv_fld_from_kvmap(kvmap, name, "value", value, false);
1556 } else if (o.type == msgpack::type::ARRAY) {
1557 auto array = o.via.array;
1558 Helpers::conv_fld_from_array(array, name, "destination", destination, 0);
1559 Helpers::conv_fld_from_array(array, name, "bit_size", bit_size, 1);
1560 Helpers::conv_fld_from_array(array, name, "value", value, 2);
1561 } else {
1562 throw_or_abort("expected MAP or ARRAY for " + name);
1563 }
1564 }
1565 };
1566
1570 std::vector<uint8_t> value;
1571
1572 friend bool operator==(const IndirectConst&, const IndirectConst&);
1573
1574 void msgpack_unpack(msgpack::object const& o)
1575 {
1576 std::string name = "IndirectConst";
1577 if (o.type == msgpack::type::MAP) {
1578 auto kvmap = Helpers::make_kvmap(o, name);
1579 Helpers::conv_fld_from_kvmap(kvmap, name, "destination_pointer", destination_pointer, false);
1580 Helpers::conv_fld_from_kvmap(kvmap, name, "bit_size", bit_size, false);
1581 Helpers::conv_fld_from_kvmap(kvmap, name, "value", value, false);
1582 } else if (o.type == msgpack::type::ARRAY) {
1583 auto array = o.via.array;
1584 Helpers::conv_fld_from_array(array, name, "destination_pointer", destination_pointer, 0);
1585 Helpers::conv_fld_from_array(array, name, "bit_size", bit_size, 1);
1586 Helpers::conv_fld_from_array(array, name, "value", value, 2);
1587 } else {
1588 throw_or_abort("expected MAP or ARRAY for " + name);
1589 }
1590 }
1591 };
1592
1593 struct Return {
1594 friend bool operator==(const Return&, const Return&);
1595
1596 void msgpack_unpack(msgpack::object const& o) {}
1597 };
1598
1600 std::string function;
1601 std::vector<Acir::ValueOrArray> destinations;
1602 std::vector<Acir::HeapValueType> destination_value_types;
1603 std::vector<Acir::ValueOrArray> inputs;
1604 std::vector<Acir::HeapValueType> input_value_types;
1605
1606 friend bool operator==(const ForeignCall&, const ForeignCall&);
1607
1608 void msgpack_unpack(msgpack::object const& o)
1609 {
1610 std::string name = "ForeignCall";
1611 if (o.type == msgpack::type::MAP) {
1612 auto kvmap = Helpers::make_kvmap(o, name);
1613 Helpers::conv_fld_from_kvmap(kvmap, name, "function", function, false);
1614 Helpers::conv_fld_from_kvmap(kvmap, name, "destinations", destinations, false);
1615 Helpers::conv_fld_from_kvmap(kvmap, name, "destination_value_types", destination_value_types, false);
1616 Helpers::conv_fld_from_kvmap(kvmap, name, "inputs", inputs, false);
1617 Helpers::conv_fld_from_kvmap(kvmap, name, "input_value_types", input_value_types, false);
1618 } else if (o.type == msgpack::type::ARRAY) {
1619 auto array = o.via.array;
1620 Helpers::conv_fld_from_array(array, name, "function", function, 0);
1621 Helpers::conv_fld_from_array(array, name, "destinations", destinations, 1);
1622 Helpers::conv_fld_from_array(array, name, "destination_value_types", destination_value_types, 2);
1623 Helpers::conv_fld_from_array(array, name, "inputs", inputs, 3);
1624 Helpers::conv_fld_from_array(array, name, "input_value_types", input_value_types, 4);
1625 } else {
1626 throw_or_abort("expected MAP or ARRAY for " + name);
1627 }
1628 }
1629 };
1630
1631 struct Mov {
1634
1635 friend bool operator==(const Mov&, const Mov&);
1636
1637 void msgpack_unpack(msgpack::object const& o)
1638 {
1639 std::string name = "Mov";
1640 if (o.type == msgpack::type::MAP) {
1641 auto kvmap = Helpers::make_kvmap(o, name);
1642 Helpers::conv_fld_from_kvmap(kvmap, name, "destination", destination, false);
1643 Helpers::conv_fld_from_kvmap(kvmap, name, "source", source, false);
1644 } else if (o.type == msgpack::type::ARRAY) {
1645 auto array = o.via.array;
1646 Helpers::conv_fld_from_array(array, name, "destination", destination, 0);
1647 Helpers::conv_fld_from_array(array, name, "source", source, 1);
1648 } else {
1649 throw_or_abort("expected MAP or ARRAY for " + name);
1650 }
1651 }
1652 };
1653
1659
1660 friend bool operator==(const ConditionalMov&, const ConditionalMov&);
1661
1662 void msgpack_unpack(msgpack::object const& o)
1663 {
1664 std::string name = "ConditionalMov";
1665 if (o.type == msgpack::type::MAP) {
1666 auto kvmap = Helpers::make_kvmap(o, name);
1667 Helpers::conv_fld_from_kvmap(kvmap, name, "destination", destination, false);
1668 Helpers::conv_fld_from_kvmap(kvmap, name, "source_a", source_a, false);
1669 Helpers::conv_fld_from_kvmap(kvmap, name, "source_b", source_b, false);
1670 Helpers::conv_fld_from_kvmap(kvmap, name, "condition", condition, false);
1671 } else if (o.type == msgpack::type::ARRAY) {
1672 auto array = o.via.array;
1673 Helpers::conv_fld_from_array(array, name, "destination", destination, 0);
1674 Helpers::conv_fld_from_array(array, name, "source_a", source_a, 1);
1675 Helpers::conv_fld_from_array(array, name, "source_b", source_b, 2);
1676 Helpers::conv_fld_from_array(array, name, "condition", condition, 3);
1677 } else {
1678 throw_or_abort("expected MAP or ARRAY for " + name);
1679 }
1680 }
1681 };
1682
1683 struct Load {
1686
1687 friend bool operator==(const Load&, const Load&);
1688
1689 void msgpack_unpack(msgpack::object const& o)
1690 {
1691 std::string name = "Load";
1692 if (o.type == msgpack::type::MAP) {
1693 auto kvmap = Helpers::make_kvmap(o, name);
1694 Helpers::conv_fld_from_kvmap(kvmap, name, "destination", destination, false);
1695 Helpers::conv_fld_from_kvmap(kvmap, name, "source_pointer", source_pointer, false);
1696 } else if (o.type == msgpack::type::ARRAY) {
1697 auto array = o.via.array;
1698 Helpers::conv_fld_from_array(array, name, "destination", destination, 0);
1699 Helpers::conv_fld_from_array(array, name, "source_pointer", source_pointer, 1);
1700 } else {
1701 throw_or_abort("expected MAP or ARRAY for " + name);
1702 }
1703 }
1704 };
1705
1706 struct Store {
1709
1710 friend bool operator==(const Store&, const Store&);
1711
1712 void msgpack_unpack(msgpack::object const& o)
1713 {
1714 std::string name = "Store";
1715 if (o.type == msgpack::type::MAP) {
1716 auto kvmap = Helpers::make_kvmap(o, name);
1717 Helpers::conv_fld_from_kvmap(kvmap, name, "destination_pointer", destination_pointer, false);
1718 Helpers::conv_fld_from_kvmap(kvmap, name, "source", source, false);
1719 } else if (o.type == msgpack::type::ARRAY) {
1720 auto array = o.via.array;
1721 Helpers::conv_fld_from_array(array, name, "destination_pointer", destination_pointer, 0);
1722 Helpers::conv_fld_from_array(array, name, "source", source, 1);
1723 } else {
1724 throw_or_abort("expected MAP or ARRAY for " + name);
1725 }
1726 }
1727 };
1728
1729 struct BlackBox {
1731
1732 friend bool operator==(const BlackBox&, const BlackBox&);
1733
1734 void msgpack_unpack(msgpack::object const& o)
1735 {
1736 try {
1737 o.convert(value);
1738 } catch (const msgpack::type_error&) {
1739 std::cerr << o << std::endl;
1740 throw_or_abort("error converting into newtype 'BlackBox'");
1741 }
1742 }
1743 };
1744
1745 struct Trap {
1747
1748 friend bool operator==(const Trap&, const Trap&);
1749
1750 void msgpack_unpack(msgpack::object const& o)
1751 {
1752 std::string name = "Trap";
1753 if (o.type == msgpack::type::MAP) {
1754 auto kvmap = Helpers::make_kvmap(o, name);
1755 Helpers::conv_fld_from_kvmap(kvmap, name, "revert_data", revert_data, false);
1756 } else if (o.type == msgpack::type::ARRAY) {
1757 auto array = o.via.array;
1758 Helpers::conv_fld_from_array(array, name, "revert_data", revert_data, 0);
1759 } else {
1760 throw_or_abort("expected MAP or ARRAY for " + name);
1761 }
1762 }
1763 };
1764
1765 struct Stop {
1767
1768 friend bool operator==(const Stop&, const Stop&);
1769
1770 void msgpack_unpack(msgpack::object const& o)
1771 {
1772 std::string name = "Stop";
1773 if (o.type == msgpack::type::MAP) {
1774 auto kvmap = Helpers::make_kvmap(o, name);
1775 Helpers::conv_fld_from_kvmap(kvmap, name, "return_data", return_data, false);
1776 } else if (o.type == msgpack::type::ARRAY) {
1777 auto array = o.via.array;
1778 Helpers::conv_fld_from_array(array, name, "return_data", return_data, 0);
1779 } else {
1780 throw_or_abort("expected MAP or ARRAY for " + name);
1781 }
1782 }
1783 };
1784
1787 Not,
1788 Cast,
1789 JumpIf,
1790 Jump,
1791 CalldataCopy,
1792 Call,
1793 Const,
1794 IndirectConst,
1795 Return,
1796 ForeignCall,
1797 Mov,
1798 ConditionalMov,
1799 Load,
1800 Store,
1801 BlackBox,
1802 Trap,
1803 Stop>
1805
1806 friend bool operator==(const BrilligOpcode&, const BrilligOpcode&);
1807
1808 void msgpack_unpack(msgpack::object const& o)
1809 {
1810
1811 if (o.type != msgpack::type::object_type::MAP && o.type != msgpack::type::object_type::STR) {
1812 std::cerr << o << std::endl;
1813 throw_or_abort("expected MAP or STR for enum 'BrilligOpcode'; got type " + std::to_string(o.type));
1814 }
1815 if (o.type == msgpack::type::object_type::MAP && o.via.map.size != 1) {
1816 throw_or_abort("expected 1 entry for enum 'BrilligOpcode'; got " + std::to_string(o.via.map.size));
1817 }
1818 std::string tag;
1819 try {
1820 if (o.type == msgpack::type::object_type::MAP) {
1821 o.via.map.ptr[0].key.convert(tag);
1822 } else {
1823 o.convert(tag);
1824 }
1825 } catch (const msgpack::type_error&) {
1826 std::cerr << o << std::endl;
1827 throw_or_abort("error converting tag to string for enum 'BrilligOpcode'");
1828 }
1829 if (tag == "BinaryFieldOp") {
1830 BinaryFieldOp v;
1831 try {
1832 o.via.map.ptr[0].val.convert(v);
1833 } catch (const msgpack::type_error&) {
1834 std::cerr << o << std::endl;
1835 throw_or_abort("error converting into enum variant 'BrilligOpcode::BinaryFieldOp'");
1836 }
1837
1838 value = v;
1839 } else if (tag == "BinaryIntOp") {
1840 BinaryIntOp v;
1841 try {
1842 o.via.map.ptr[0].val.convert(v);
1843 } catch (const msgpack::type_error&) {
1844 std::cerr << o << std::endl;
1845 throw_or_abort("error converting into enum variant 'BrilligOpcode::BinaryIntOp'");
1846 }
1847
1848 value = v;
1849 } else if (tag == "Not") {
1850 Not v;
1851 try {
1852 o.via.map.ptr[0].val.convert(v);
1853 } catch (const msgpack::type_error&) {
1854 std::cerr << o << std::endl;
1855 throw_or_abort("error converting into enum variant 'BrilligOpcode::Not'");
1856 }
1857
1858 value = v;
1859 } else if (tag == "Cast") {
1860 Cast v;
1861 try {
1862 o.via.map.ptr[0].val.convert(v);
1863 } catch (const msgpack::type_error&) {
1864 std::cerr << o << std::endl;
1865 throw_or_abort("error converting into enum variant 'BrilligOpcode::Cast'");
1866 }
1867
1868 value = v;
1869 } else if (tag == "JumpIf") {
1870 JumpIf v;
1871 try {
1872 o.via.map.ptr[0].val.convert(v);
1873 } catch (const msgpack::type_error&) {
1874 std::cerr << o << std::endl;
1875 throw_or_abort("error converting into enum variant 'BrilligOpcode::JumpIf'");
1876 }
1877
1878 value = v;
1879 } else if (tag == "Jump") {
1880 Jump v;
1881 try {
1882 o.via.map.ptr[0].val.convert(v);
1883 } catch (const msgpack::type_error&) {
1884 std::cerr << o << std::endl;
1885 throw_or_abort("error converting into enum variant 'BrilligOpcode::Jump'");
1886 }
1887
1888 value = v;
1889 } else if (tag == "CalldataCopy") {
1890 CalldataCopy v;
1891 try {
1892 o.via.map.ptr[0].val.convert(v);
1893 } catch (const msgpack::type_error&) {
1894 std::cerr << o << std::endl;
1895 throw_or_abort("error converting into enum variant 'BrilligOpcode::CalldataCopy'");
1896 }
1897
1898 value = v;
1899 } else if (tag == "Call") {
1900 Call v;
1901 try {
1902 o.via.map.ptr[0].val.convert(v);
1903 } catch (const msgpack::type_error&) {
1904 std::cerr << o << std::endl;
1905 throw_or_abort("error converting into enum variant 'BrilligOpcode::Call'");
1906 }
1907
1908 value = v;
1909 } else if (tag == "Const") {
1910 Const v;
1911 try {
1912 o.via.map.ptr[0].val.convert(v);
1913 } catch (const msgpack::type_error&) {
1914 std::cerr << o << std::endl;
1915 throw_or_abort("error converting into enum variant 'BrilligOpcode::Const'");
1916 }
1917
1918 value = v;
1919 } else if (tag == "IndirectConst") {
1920 IndirectConst v;
1921 try {
1922 o.via.map.ptr[0].val.convert(v);
1923 } catch (const msgpack::type_error&) {
1924 std::cerr << o << std::endl;
1925 throw_or_abort("error converting into enum variant 'BrilligOpcode::IndirectConst'");
1926 }
1927
1928 value = v;
1929 } else if (tag == "Return") {
1930 Return v;
1931 value = v;
1932 } else if (tag == "ForeignCall") {
1933 ForeignCall v;
1934 try {
1935 o.via.map.ptr[0].val.convert(v);
1936 } catch (const msgpack::type_error&) {
1937 std::cerr << o << std::endl;
1938 throw_or_abort("error converting into enum variant 'BrilligOpcode::ForeignCall'");
1939 }
1940
1941 value = v;
1942 } else if (tag == "Mov") {
1943 Mov v;
1944 try {
1945 o.via.map.ptr[0].val.convert(v);
1946 } catch (const msgpack::type_error&) {
1947 std::cerr << o << std::endl;
1948 throw_or_abort("error converting into enum variant 'BrilligOpcode::Mov'");
1949 }
1950
1951 value = v;
1952 } else if (tag == "ConditionalMov") {
1954 try {
1955 o.via.map.ptr[0].val.convert(v);
1956 } catch (const msgpack::type_error&) {
1957 std::cerr << o << std::endl;
1958 throw_or_abort("error converting into enum variant 'BrilligOpcode::ConditionalMov'");
1959 }
1960
1961 value = v;
1962 } else if (tag == "Load") {
1963 Load v;
1964 try {
1965 o.via.map.ptr[0].val.convert(v);
1966 } catch (const msgpack::type_error&) {
1967 std::cerr << o << std::endl;
1968 throw_or_abort("error converting into enum variant 'BrilligOpcode::Load'");
1969 }
1970
1971 value = v;
1972 } else if (tag == "Store") {
1973 Store v;
1974 try {
1975 o.via.map.ptr[0].val.convert(v);
1976 } catch (const msgpack::type_error&) {
1977 std::cerr << o << std::endl;
1978 throw_or_abort("error converting into enum variant 'BrilligOpcode::Store'");
1979 }
1980
1981 value = v;
1982 } else if (tag == "BlackBox") {
1983 BlackBox v;
1984 try {
1985 o.via.map.ptr[0].val.convert(v);
1986 } catch (const msgpack::type_error&) {
1987 std::cerr << o << std::endl;
1988 throw_or_abort("error converting into enum variant 'BrilligOpcode::BlackBox'");
1989 }
1990
1991 value = v;
1992 } else if (tag == "Trap") {
1993 Trap v;
1994 try {
1995 o.via.map.ptr[0].val.convert(v);
1996 } catch (const msgpack::type_error&) {
1997 std::cerr << o << std::endl;
1998 throw_or_abort("error converting into enum variant 'BrilligOpcode::Trap'");
1999 }
2000
2001 value = v;
2002 } else if (tag == "Stop") {
2003 Stop v;
2004 try {
2005 o.via.map.ptr[0].val.convert(v);
2006 } catch (const msgpack::type_error&) {
2007 std::cerr << o << std::endl;
2008 throw_or_abort("error converting into enum variant 'BrilligOpcode::Stop'");
2009 }
2010
2011 value = v;
2012 } else {
2013 std::cerr << o << std::endl;
2014 throw_or_abort("unknown 'BrilligOpcode' enum variant: " + tag);
2015 }
2016 }
2017};
2018
2019struct Witness {
2020 uint32_t value;
2021
2022 friend bool operator==(const Witness&, const Witness&);
2023
2024 void msgpack_unpack(msgpack::object const& o)
2025 {
2026 try {
2027 o.convert(value);
2028 } catch (const msgpack::type_error&) {
2029 std::cerr << o << std::endl;
2030 throw_or_abort("error converting into newtype 'Witness'");
2031 }
2032 }
2033};
2034
2036
2037 struct Constant {
2038 std::vector<uint8_t> value;
2039
2040 friend bool operator==(const Constant&, const Constant&);
2041
2042 void msgpack_unpack(msgpack::object const& o)
2043 {
2044 try {
2045 o.convert(value);
2046 } catch (const msgpack::type_error&) {
2047 std::cerr << o << std::endl;
2048 throw_or_abort("error converting into newtype 'Constant'");
2049 }
2050 }
2051 };
2052
2053 struct Witness {
2055
2056 friend bool operator==(const Witness&, const Witness&);
2057
2058 void msgpack_unpack(msgpack::object const& o)
2059 {
2060 try {
2061 o.convert(value);
2062 } catch (const msgpack::type_error&) {
2063 std::cerr << o << std::endl;
2064 throw_or_abort("error converting into newtype 'Witness'");
2065 }
2066 }
2067 };
2068
2070
2071 friend bool operator==(const FunctionInput&, const FunctionInput&);
2072
2073 void msgpack_unpack(msgpack::object const& o)
2074 {
2075
2076 if (o.type != msgpack::type::object_type::MAP && o.type != msgpack::type::object_type::STR) {
2077 std::cerr << o << std::endl;
2078 throw_or_abort("expected MAP or STR for enum 'FunctionInput'; got type " + std::to_string(o.type));
2079 }
2080 if (o.type == msgpack::type::object_type::MAP && o.via.map.size != 1) {
2081 throw_or_abort("expected 1 entry for enum 'FunctionInput'; got " + std::to_string(o.via.map.size));
2082 }
2083 std::string tag;
2084 try {
2085 if (o.type == msgpack::type::object_type::MAP) {
2086 o.via.map.ptr[0].key.convert(tag);
2087 } else {
2088 o.convert(tag);
2089 }
2090 } catch (const msgpack::type_error&) {
2091 std::cerr << o << std::endl;
2092 throw_or_abort("error converting tag to string for enum 'FunctionInput'");
2093 }
2094 if (tag == "Constant") {
2095 Constant v;
2096 try {
2097 o.via.map.ptr[0].val.convert(v);
2098 } catch (const msgpack::type_error&) {
2099 std::cerr << o << std::endl;
2100 throw_or_abort("error converting into enum variant 'FunctionInput::Constant'");
2101 }
2102
2103 value = v;
2104 } else if (tag == "Witness") {
2105 Witness v;
2106 try {
2107 o.via.map.ptr[0].val.convert(v);
2108 } catch (const msgpack::type_error&) {
2109 std::cerr << o << std::endl;
2110 throw_or_abort("error converting into enum variant 'FunctionInput::Witness'");
2111 }
2112
2113 value = v;
2114 } else {
2115 std::cerr << o << std::endl;
2116 throw_or_abort("unknown 'FunctionInput' enum variant: " + tag);
2117 }
2118 }
2119};
2120
2122
2124 std::vector<Acir::FunctionInput> inputs;
2127 std::vector<Acir::Witness> outputs;
2128
2129 friend bool operator==(const AES128Encrypt&, const AES128Encrypt&);
2130
2131 void msgpack_unpack(msgpack::object const& o)
2132 {
2133 std::string name = "AES128Encrypt";
2134 if (o.type == msgpack::type::MAP) {
2135 auto kvmap = Helpers::make_kvmap(o, name);
2136 Helpers::conv_fld_from_kvmap(kvmap, name, "inputs", inputs, false);
2137 Helpers::conv_fld_from_kvmap(kvmap, name, "iv", iv, false);
2138 Helpers::conv_fld_from_kvmap(kvmap, name, "key", key, false);
2139 Helpers::conv_fld_from_kvmap(kvmap, name, "outputs", outputs, false);
2140 } else if (o.type == msgpack::type::ARRAY) {
2141 auto array = o.via.array;
2142 Helpers::conv_fld_from_array(array, name, "inputs", inputs, 0);
2143 Helpers::conv_fld_from_array(array, name, "iv", iv, 1);
2144 Helpers::conv_fld_from_array(array, name, "key", key, 2);
2145 Helpers::conv_fld_from_array(array, name, "outputs", outputs, 3);
2146 } else {
2147 throw_or_abort("expected MAP or ARRAY for " + name);
2148 }
2149 }
2150 };
2151
2152 struct AND {
2155 uint32_t num_bits;
2157
2158 friend bool operator==(const AND&, const AND&);
2159
2160 void msgpack_unpack(msgpack::object const& o)
2161 {
2162 std::string name = "AND";
2163 if (o.type == msgpack::type::MAP) {
2164 auto kvmap = Helpers::make_kvmap(o, name);
2165 Helpers::conv_fld_from_kvmap(kvmap, name, "lhs", lhs, false);
2166 Helpers::conv_fld_from_kvmap(kvmap, name, "rhs", rhs, false);
2167 Helpers::conv_fld_from_kvmap(kvmap, name, "num_bits", num_bits, false);
2168 Helpers::conv_fld_from_kvmap(kvmap, name, "output", output, false);
2169 } else if (o.type == msgpack::type::ARRAY) {
2170 auto array = o.via.array;
2171 Helpers::conv_fld_from_array(array, name, "lhs", lhs, 0);
2172 Helpers::conv_fld_from_array(array, name, "rhs", rhs, 1);
2173 Helpers::conv_fld_from_array(array, name, "num_bits", num_bits, 2);
2174 Helpers::conv_fld_from_array(array, name, "output", output, 3);
2175 } else {
2176 throw_or_abort("expected MAP or ARRAY for " + name);
2177 }
2178 }
2179 };
2180
2181 struct XOR {
2184 uint32_t num_bits;
2186
2187 friend bool operator==(const XOR&, const XOR&);
2188
2189 void msgpack_unpack(msgpack::object const& o)
2190 {
2191 std::string name = "XOR";
2192 if (o.type == msgpack::type::MAP) {
2193 auto kvmap = Helpers::make_kvmap(o, name);
2194 Helpers::conv_fld_from_kvmap(kvmap, name, "lhs", lhs, false);
2195 Helpers::conv_fld_from_kvmap(kvmap, name, "rhs", rhs, false);
2196 Helpers::conv_fld_from_kvmap(kvmap, name, "num_bits", num_bits, false);
2197 Helpers::conv_fld_from_kvmap(kvmap, name, "output", output, false);
2198 } else if (o.type == msgpack::type::ARRAY) {
2199 auto array = o.via.array;
2200 Helpers::conv_fld_from_array(array, name, "lhs", lhs, 0);
2201 Helpers::conv_fld_from_array(array, name, "rhs", rhs, 1);
2202 Helpers::conv_fld_from_array(array, name, "num_bits", num_bits, 2);
2203 Helpers::conv_fld_from_array(array, name, "output", output, 3);
2204 } else {
2205 throw_or_abort("expected MAP or ARRAY for " + name);
2206 }
2207 }
2208 };
2209
2210 struct RANGE {
2212 uint32_t num_bits;
2213
2214 friend bool operator==(const RANGE&, const RANGE&);
2215
2216 void msgpack_unpack(msgpack::object const& o)
2217 {
2218 std::string name = "RANGE";
2219 if (o.type == msgpack::type::MAP) {
2220 auto kvmap = Helpers::make_kvmap(o, name);
2221 Helpers::conv_fld_from_kvmap(kvmap, name, "input", input, false);
2222 Helpers::conv_fld_from_kvmap(kvmap, name, "num_bits", num_bits, false);
2223 } else if (o.type == msgpack::type::ARRAY) {
2224 auto array = o.via.array;
2225 Helpers::conv_fld_from_array(array, name, "input", input, 0);
2226 Helpers::conv_fld_from_array(array, name, "num_bits", num_bits, 1);
2227 } else {
2228 throw_or_abort("expected MAP or ARRAY for " + name);
2229 }
2230 }
2231 };
2232
2233 struct Blake2s {
2234 std::vector<Acir::FunctionInput> inputs;
2236
2237 friend bool operator==(const Blake2s&, const Blake2s&);
2238
2239 void msgpack_unpack(msgpack::object const& o)
2240 {
2241 std::string name = "Blake2s";
2242 if (o.type == msgpack::type::MAP) {
2243 auto kvmap = Helpers::make_kvmap(o, name);
2244 Helpers::conv_fld_from_kvmap(kvmap, name, "inputs", inputs, false);
2245 Helpers::conv_fld_from_kvmap(kvmap, name, "outputs", outputs, false);
2246 } else if (o.type == msgpack::type::ARRAY) {
2247 auto array = o.via.array;
2248 Helpers::conv_fld_from_array(array, name, "inputs", inputs, 0);
2249 Helpers::conv_fld_from_array(array, name, "outputs", outputs, 1);
2250 } else {
2251 throw_or_abort("expected MAP or ARRAY for " + name);
2252 }
2253 }
2254 };
2255
2256 struct Blake3 {
2257 std::vector<Acir::FunctionInput> inputs;
2259
2260 friend bool operator==(const Blake3&, const Blake3&);
2261
2262 void msgpack_unpack(msgpack::object const& o)
2263 {
2264 std::string name = "Blake3";
2265 if (o.type == msgpack::type::MAP) {
2266 auto kvmap = Helpers::make_kvmap(o, name);
2267 Helpers::conv_fld_from_kvmap(kvmap, name, "inputs", inputs, false);
2268 Helpers::conv_fld_from_kvmap(kvmap, name, "outputs", outputs, false);
2269 } else if (o.type == msgpack::type::ARRAY) {
2270 auto array = o.via.array;
2271 Helpers::conv_fld_from_array(array, name, "inputs", inputs, 0);
2272 Helpers::conv_fld_from_array(array, name, "outputs", outputs, 1);
2273 } else {
2274 throw_or_abort("expected MAP or ARRAY for " + name);
2275 }
2276 }
2277 };
2278
2286
2287 friend bool operator==(const EcdsaSecp256k1&, const EcdsaSecp256k1&);
2288
2289 void msgpack_unpack(msgpack::object const& o)
2290 {
2291 std::string name = "EcdsaSecp256k1";
2292 if (o.type == msgpack::type::MAP) {
2293 auto kvmap = Helpers::make_kvmap(o, name);
2294 Helpers::conv_fld_from_kvmap(kvmap, name, "public_key_x", public_key_x, false);
2295 Helpers::conv_fld_from_kvmap(kvmap, name, "public_key_y", public_key_y, false);
2296 Helpers::conv_fld_from_kvmap(kvmap, name, "signature", signature, false);
2297 Helpers::conv_fld_from_kvmap(kvmap, name, "hashed_message", hashed_message, false);
2298 Helpers::conv_fld_from_kvmap(kvmap, name, "predicate", predicate, false);
2299 Helpers::conv_fld_from_kvmap(kvmap, name, "output", output, false);
2300 } else if (o.type == msgpack::type::ARRAY) {
2301 auto array = o.via.array;
2302 Helpers::conv_fld_from_array(array, name, "public_key_x", public_key_x, 0);
2303 Helpers::conv_fld_from_array(array, name, "public_key_y", public_key_y, 1);
2304 Helpers::conv_fld_from_array(array, name, "signature", signature, 2);
2305 Helpers::conv_fld_from_array(array, name, "hashed_message", hashed_message, 3);
2306 Helpers::conv_fld_from_array(array, name, "predicate", predicate, 4);
2307 Helpers::conv_fld_from_array(array, name, "output", output, 5);
2308 } else {
2309 throw_or_abort("expected MAP or ARRAY for " + name);
2310 }
2311 }
2312 };
2313
2321
2322 friend bool operator==(const EcdsaSecp256r1&, const EcdsaSecp256r1&);
2323
2324 void msgpack_unpack(msgpack::object const& o)
2325 {
2326 std::string name = "EcdsaSecp256r1";
2327 if (o.type == msgpack::type::MAP) {
2328 auto kvmap = Helpers::make_kvmap(o, name);
2329 Helpers::conv_fld_from_kvmap(kvmap, name, "public_key_x", public_key_x, false);
2330 Helpers::conv_fld_from_kvmap(kvmap, name, "public_key_y", public_key_y, false);
2331 Helpers::conv_fld_from_kvmap(kvmap, name, "signature", signature, false);
2332 Helpers::conv_fld_from_kvmap(kvmap, name, "hashed_message", hashed_message, false);
2333 Helpers::conv_fld_from_kvmap(kvmap, name, "predicate", predicate, false);
2334 Helpers::conv_fld_from_kvmap(kvmap, name, "output", output, false);
2335 } else if (o.type == msgpack::type::ARRAY) {
2336 auto array = o.via.array;
2337 Helpers::conv_fld_from_array(array, name, "public_key_x", public_key_x, 0);
2338 Helpers::conv_fld_from_array(array, name, "public_key_y", public_key_y, 1);
2339 Helpers::conv_fld_from_array(array, name, "signature", signature, 2);
2340 Helpers::conv_fld_from_array(array, name, "hashed_message", hashed_message, 3);
2341 Helpers::conv_fld_from_array(array, name, "predicate", predicate, 4);
2342 Helpers::conv_fld_from_array(array, name, "output", output, 5);
2343 } else {
2344 throw_or_abort("expected MAP or ARRAY for " + name);
2345 }
2346 }
2347 };
2348
2350 std::vector<Acir::FunctionInput> points;
2351 std::vector<Acir::FunctionInput> scalars;
2354
2355 friend bool operator==(const MultiScalarMul&, const MultiScalarMul&);
2356
2357 void msgpack_unpack(msgpack::object const& o)
2358 {
2359 std::string name = "MultiScalarMul";
2360 if (o.type == msgpack::type::MAP) {
2361 auto kvmap = Helpers::make_kvmap(o, name);
2362 Helpers::conv_fld_from_kvmap(kvmap, name, "points", points, false);
2363 Helpers::conv_fld_from_kvmap(kvmap, name, "scalars", scalars, false);
2364 Helpers::conv_fld_from_kvmap(kvmap, name, "predicate", predicate, false);
2365 Helpers::conv_fld_from_kvmap(kvmap, name, "outputs", outputs, false);
2366 } else if (o.type == msgpack::type::ARRAY) {
2367 auto array = o.via.array;
2368 Helpers::conv_fld_from_array(array, name, "points", points, 0);
2369 Helpers::conv_fld_from_array(array, name, "scalars", scalars, 1);
2370 Helpers::conv_fld_from_array(array, name, "predicate", predicate, 2);
2371 Helpers::conv_fld_from_array(array, name, "outputs", outputs, 3);
2372 } else {
2373 throw_or_abort("expected MAP or ARRAY for " + name);
2374 }
2375 }
2376 };
2377
2383
2384 friend bool operator==(const EmbeddedCurveAdd&, const EmbeddedCurveAdd&);
2385
2386 void msgpack_unpack(msgpack::object const& o)
2387 {
2388 std::string name = "EmbeddedCurveAdd";
2389 if (o.type == msgpack::type::MAP) {
2390 auto kvmap = Helpers::make_kvmap(o, name);
2391 Helpers::conv_fld_from_kvmap(kvmap, name, "input1", input1, false);
2392 Helpers::conv_fld_from_kvmap(kvmap, name, "input2", input2, false);
2393 Helpers::conv_fld_from_kvmap(kvmap, name, "predicate", predicate, false);
2394 Helpers::conv_fld_from_kvmap(kvmap, name, "outputs", outputs, false);
2395 } else if (o.type == msgpack::type::ARRAY) {
2396 auto array = o.via.array;
2397 Helpers::conv_fld_from_array(array, name, "input1", input1, 0);
2398 Helpers::conv_fld_from_array(array, name, "input2", input2, 1);
2399 Helpers::conv_fld_from_array(array, name, "predicate", predicate, 2);
2400 Helpers::conv_fld_from_array(array, name, "outputs", outputs, 3);
2401 } else {
2402 throw_or_abort("expected MAP or ARRAY for " + name);
2403 }
2404 }
2405 };
2406
2410
2411 friend bool operator==(const Keccakf1600&, const Keccakf1600&);
2412
2413 void msgpack_unpack(msgpack::object const& o)
2414 {
2415 std::string name = "Keccakf1600";
2416 if (o.type == msgpack::type::MAP) {
2417 auto kvmap = Helpers::make_kvmap(o, name);
2418 Helpers::conv_fld_from_kvmap(kvmap, name, "inputs", inputs, false);
2419 Helpers::conv_fld_from_kvmap(kvmap, name, "outputs", outputs, false);
2420 } else if (o.type == msgpack::type::ARRAY) {
2421 auto array = o.via.array;
2422 Helpers::conv_fld_from_array(array, name, "inputs", inputs, 0);
2423 Helpers::conv_fld_from_array(array, name, "outputs", outputs, 1);
2424 } else {
2425 throw_or_abort("expected MAP or ARRAY for " + name);
2426 }
2427 }
2428 };
2429
2431 std::vector<Acir::FunctionInput> verification_key;
2432 std::vector<Acir::FunctionInput> proof;
2433 std::vector<Acir::FunctionInput> public_inputs;
2435 uint32_t proof_type;
2437
2438 friend bool operator==(const RecursiveAggregation&, const RecursiveAggregation&);
2439
2440 void msgpack_unpack(msgpack::object const& o)
2441 {
2442 std::string name = "RecursiveAggregation";
2443 if (o.type == msgpack::type::MAP) {
2444 auto kvmap = Helpers::make_kvmap(o, name);
2445 Helpers::conv_fld_from_kvmap(kvmap, name, "verification_key", verification_key, false);
2446 Helpers::conv_fld_from_kvmap(kvmap, name, "proof", proof, false);
2447 Helpers::conv_fld_from_kvmap(kvmap, name, "public_inputs", public_inputs, false);
2448 Helpers::conv_fld_from_kvmap(kvmap, name, "key_hash", key_hash, false);
2449 Helpers::conv_fld_from_kvmap(kvmap, name, "proof_type", proof_type, false);
2450 Helpers::conv_fld_from_kvmap(kvmap, name, "predicate", predicate, false);
2451 } else if (o.type == msgpack::type::ARRAY) {
2452 auto array = o.via.array;
2453 Helpers::conv_fld_from_array(array, name, "verification_key", verification_key, 0);
2454 Helpers::conv_fld_from_array(array, name, "proof", proof, 1);
2455 Helpers::conv_fld_from_array(array, name, "public_inputs", public_inputs, 2);
2456 Helpers::conv_fld_from_array(array, name, "key_hash", key_hash, 3);
2457 Helpers::conv_fld_from_array(array, name, "proof_type", proof_type, 4);
2458 Helpers::conv_fld_from_array(array, name, "predicate", predicate, 5);
2459 } else {
2460 throw_or_abort("expected MAP or ARRAY for " + name);
2461 }
2462 }
2463 };
2464
2466 std::vector<Acir::FunctionInput> inputs;
2467 std::vector<Acir::Witness> outputs;
2468
2469 friend bool operator==(const Poseidon2Permutation&, const Poseidon2Permutation&);
2470
2471 void msgpack_unpack(msgpack::object const& o)
2472 {
2473 std::string name = "Poseidon2Permutation";
2474 if (o.type == msgpack::type::MAP) {
2475 auto kvmap = Helpers::make_kvmap(o, name);
2476 Helpers::conv_fld_from_kvmap(kvmap, name, "inputs", inputs, false);
2477 Helpers::conv_fld_from_kvmap(kvmap, name, "outputs", outputs, false);
2478 } else if (o.type == msgpack::type::ARRAY) {
2479 auto array = o.via.array;
2480 Helpers::conv_fld_from_array(array, name, "inputs", inputs, 0);
2481 Helpers::conv_fld_from_array(array, name, "outputs", outputs, 1);
2482 } else {
2483 throw_or_abort("expected MAP or ARRAY for " + name);
2484 }
2485 }
2486 };
2487
2492
2493 friend bool operator==(const Sha256Compression&, const Sha256Compression&);
2494
2495 void msgpack_unpack(msgpack::object const& o)
2496 {
2497 std::string name = "Sha256Compression";
2498 if (o.type == msgpack::type::MAP) {
2499 auto kvmap = Helpers::make_kvmap(o, name);
2500 Helpers::conv_fld_from_kvmap(kvmap, name, "inputs", inputs, false);
2501 Helpers::conv_fld_from_kvmap(kvmap, name, "hash_values", hash_values, false);
2502 Helpers::conv_fld_from_kvmap(kvmap, name, "outputs", outputs, false);
2503 } else if (o.type == msgpack::type::ARRAY) {
2504 auto array = o.via.array;
2505 Helpers::conv_fld_from_array(array, name, "inputs", inputs, 0);
2506 Helpers::conv_fld_from_array(array, name, "hash_values", hash_values, 1);
2507 Helpers::conv_fld_from_array(array, name, "outputs", outputs, 2);
2508 } else {
2509 throw_or_abort("expected MAP or ARRAY for " + name);
2510 }
2511 }
2512 };
2513
2514 std::variant<AES128Encrypt,
2515 AND,
2516 XOR,
2517 RANGE,
2518 Blake2s,
2519 Blake3,
2520 EcdsaSecp256k1,
2521 EcdsaSecp256r1,
2522 MultiScalarMul,
2523 EmbeddedCurveAdd,
2524 Keccakf1600,
2525 RecursiveAggregation,
2526 Poseidon2Permutation,
2527 Sha256Compression>
2529
2530 friend bool operator==(const BlackBoxFuncCall&, const BlackBoxFuncCall&);
2531
2532 void msgpack_unpack(msgpack::object const& o)
2533 {
2534
2535 if (o.type != msgpack::type::object_type::MAP && o.type != msgpack::type::object_type::STR) {
2536 std::cerr << o << std::endl;
2537 throw_or_abort("expected MAP or STR for enum 'BlackBoxFuncCall'; got type " + std::to_string(o.type));
2538 }
2539 if (o.type == msgpack::type::object_type::MAP && o.via.map.size != 1) {
2540 throw_or_abort("expected 1 entry for enum 'BlackBoxFuncCall'; got " + std::to_string(o.via.map.size));
2541 }
2542 std::string tag;
2543 try {
2544 if (o.type == msgpack::type::object_type::MAP) {
2545 o.via.map.ptr[0].key.convert(tag);
2546 } else {
2547 o.convert(tag);
2548 }
2549 } catch (const msgpack::type_error&) {
2550 std::cerr << o << std::endl;
2551 throw_or_abort("error converting tag to string for enum 'BlackBoxFuncCall'");
2552 }
2553 if (tag == "AES128Encrypt") {
2554 AES128Encrypt v;
2555 try {
2556 o.via.map.ptr[0].val.convert(v);
2557 } catch (const msgpack::type_error&) {
2558 std::cerr << o << std::endl;
2559 throw_or_abort("error converting into enum variant 'BlackBoxFuncCall::AES128Encrypt'");
2560 }
2561
2562 value = v;
2563 } else if (tag == "AND") {
2564 AND v;
2565 try {
2566 o.via.map.ptr[0].val.convert(v);
2567 } catch (const msgpack::type_error&) {
2568 std::cerr << o << std::endl;
2569 throw_or_abort("error converting into enum variant 'BlackBoxFuncCall::AND'");
2570 }
2571
2572 value = v;
2573 } else if (tag == "XOR") {
2574 XOR v;
2575 try {
2576 o.via.map.ptr[0].val.convert(v);
2577 } catch (const msgpack::type_error&) {
2578 std::cerr << o << std::endl;
2579 throw_or_abort("error converting into enum variant 'BlackBoxFuncCall::XOR'");
2580 }
2581
2582 value = v;
2583 } else if (tag == "RANGE") {
2584 RANGE v;
2585 try {
2586 o.via.map.ptr[0].val.convert(v);
2587 } catch (const msgpack::type_error&) {
2588 std::cerr << o << std::endl;
2589 throw_or_abort("error converting into enum variant 'BlackBoxFuncCall::RANGE'");
2590 }
2591
2592 value = v;
2593 } else if (tag == "Blake2s") {
2594 Blake2s v;
2595 try {
2596 o.via.map.ptr[0].val.convert(v);
2597 } catch (const msgpack::type_error&) {
2598 std::cerr << o << std::endl;
2599 throw_or_abort("error converting into enum variant 'BlackBoxFuncCall::Blake2s'");
2600 }
2601
2602 value = v;
2603 } else if (tag == "Blake3") {
2604 Blake3 v;
2605 try {
2606 o.via.map.ptr[0].val.convert(v);
2607 } catch (const msgpack::type_error&) {
2608 std::cerr << o << std::endl;
2609 throw_or_abort("error converting into enum variant 'BlackBoxFuncCall::Blake3'");
2610 }
2611
2612 value = v;
2613 } else if (tag == "EcdsaSecp256k1") {
2615 try {
2616 o.via.map.ptr[0].val.convert(v);
2617 } catch (const msgpack::type_error&) {
2618 std::cerr << o << std::endl;
2619 throw_or_abort("error converting into enum variant 'BlackBoxFuncCall::EcdsaSecp256k1'");
2620 }
2621
2622 value = v;
2623 } else if (tag == "EcdsaSecp256r1") {
2625 try {
2626 o.via.map.ptr[0].val.convert(v);
2627 } catch (const msgpack::type_error&) {
2628 std::cerr << o << std::endl;
2629 throw_or_abort("error converting into enum variant 'BlackBoxFuncCall::EcdsaSecp256r1'");
2630 }
2631
2632 value = v;
2633 } else if (tag == "MultiScalarMul") {
2635 try {
2636 o.via.map.ptr[0].val.convert(v);
2637 } catch (const msgpack::type_error&) {
2638 std::cerr << o << std::endl;
2639 throw_or_abort("error converting into enum variant 'BlackBoxFuncCall::MultiScalarMul'");
2640 }
2641
2642 value = v;
2643 } else if (tag == "EmbeddedCurveAdd") {
2645 try {
2646 o.via.map.ptr[0].val.convert(v);
2647 } catch (const msgpack::type_error&) {
2648 std::cerr << o << std::endl;
2649 throw_or_abort("error converting into enum variant 'BlackBoxFuncCall::EmbeddedCurveAdd'");
2650 }
2651
2652 value = v;
2653 } else if (tag == "Keccakf1600") {
2654 Keccakf1600 v;
2655 try {
2656 o.via.map.ptr[0].val.convert(v);
2657 } catch (const msgpack::type_error&) {
2658 std::cerr << o << std::endl;
2659 throw_or_abort("error converting into enum variant 'BlackBoxFuncCall::Keccakf1600'");
2660 }
2661
2662 value = v;
2663 } else if (tag == "RecursiveAggregation") {
2665 try {
2666 o.via.map.ptr[0].val.convert(v);
2667 } catch (const msgpack::type_error&) {
2668 std::cerr << o << std::endl;
2669 throw_or_abort("error converting into enum variant 'BlackBoxFuncCall::RecursiveAggregation'");
2670 }
2671
2672 value = v;
2673 } else if (tag == "Poseidon2Permutation") {
2675 try {
2676 o.via.map.ptr[0].val.convert(v);
2677 } catch (const msgpack::type_error&) {
2678 std::cerr << o << std::endl;
2679 throw_or_abort("error converting into enum variant 'BlackBoxFuncCall::Poseidon2Permutation'");
2680 }
2681
2682 value = v;
2683 } else if (tag == "Sha256Compression") {
2685 try {
2686 o.via.map.ptr[0].val.convert(v);
2687 } catch (const msgpack::type_error&) {
2688 std::cerr << o << std::endl;
2689 throw_or_abort("error converting into enum variant 'BlackBoxFuncCall::Sha256Compression'");
2690 }
2691
2692 value = v;
2693 } else {
2694 std::cerr << o << std::endl;
2695 throw_or_abort("unknown 'BlackBoxFuncCall' enum variant: " + tag);
2696 }
2697 }
2698};
2699
2700struct BlockId {
2701 uint32_t value;
2702
2703 friend bool operator==(const BlockId&, const BlockId&);
2704
2705 void msgpack_unpack(msgpack::object const& o)
2706 {
2707 try {
2708 o.convert(value);
2709 } catch (const msgpack::type_error&) {
2710 std::cerr << o << std::endl;
2711 throw_or_abort("error converting into newtype 'BlockId'");
2712 }
2713 }
2714};
2715
2717
2718 struct Memory {
2719 friend bool operator==(const Memory&, const Memory&);
2720
2721 void msgpack_unpack(msgpack::object const& o) {}
2722 };
2723
2724 struct CallData {
2725 uint32_t value;
2726
2727 friend bool operator==(const CallData&, const CallData&);
2728
2729 void msgpack_unpack(msgpack::object const& o)
2730 {
2731 try {
2732 o.convert(value);
2733 } catch (const msgpack::type_error&) {
2734 std::cerr << o << std::endl;
2735 throw_or_abort("error converting into newtype 'CallData'");
2736 }
2737 }
2738 };
2739
2740 struct ReturnData {
2741 friend bool operator==(const ReturnData&, const ReturnData&);
2742
2743 void msgpack_unpack(msgpack::object const& o) {}
2744 };
2745
2747
2748 friend bool operator==(const BlockType&, const BlockType&);
2749
2750 void msgpack_unpack(msgpack::object const& o)
2751 {
2752
2753 if (o.type != msgpack::type::object_type::MAP && o.type != msgpack::type::object_type::STR) {
2754 std::cerr << o << std::endl;
2755 throw_or_abort("expected MAP or STR for enum 'BlockType'; got type " + std::to_string(o.type));
2756 }
2757 if (o.type == msgpack::type::object_type::MAP && o.via.map.size != 1) {
2758 throw_or_abort("expected 1 entry for enum 'BlockType'; got " + std::to_string(o.via.map.size));
2759 }
2760 std::string tag;
2761 try {
2762 if (o.type == msgpack::type::object_type::MAP) {
2763 o.via.map.ptr[0].key.convert(tag);
2764 } else {
2765 o.convert(tag);
2766 }
2767 } catch (const msgpack::type_error&) {
2768 std::cerr << o << std::endl;
2769 throw_or_abort("error converting tag to string for enum 'BlockType'");
2770 }
2771 if (tag == "Memory") {
2772 Memory v;
2773 value = v;
2774 } else if (tag == "CallData") {
2775 CallData v;
2776 try {
2777 o.via.map.ptr[0].val.convert(v);
2778 } catch (const msgpack::type_error&) {
2779 std::cerr << o << std::endl;
2780 throw_or_abort("error converting into enum variant 'BlockType::CallData'");
2781 }
2782
2783 value = v;
2784 } else if (tag == "ReturnData") {
2785 ReturnData v;
2786 value = v;
2787 } else {
2788 std::cerr << o << std::endl;
2789 throw_or_abort("unknown 'BlockType' enum variant: " + tag);
2790 }
2791 }
2792};
2793
2797 std::vector<uint8_t> q_c;
2798
2799 friend bool operator==(const Expression&, const Expression&);
2800
2801 void msgpack_unpack(msgpack::object const& o)
2802 {
2803 std::string name = "Expression";
2804 if (o.type == msgpack::type::MAP) {
2805 auto kvmap = Helpers::make_kvmap(o, name);
2806 Helpers::conv_fld_from_kvmap(kvmap, name, "mul_terms", mul_terms, false);
2807 Helpers::conv_fld_from_kvmap(kvmap, name, "linear_combinations", linear_combinations, false);
2808 Helpers::conv_fld_from_kvmap(kvmap, name, "q_c", q_c, false);
2809 } else if (o.type == msgpack::type::ARRAY) {
2810 auto array = o.via.array;
2811 Helpers::conv_fld_from_array(array, name, "mul_terms", mul_terms, 0);
2812 Helpers::conv_fld_from_array(array, name, "linear_combinations", linear_combinations, 1);
2813 Helpers::conv_fld_from_array(array, name, "q_c", q_c, 2);
2814 } else {
2815 throw_or_abort("expected MAP or ARRAY for " + name);
2816 }
2817 }
2818};
2819
2821
2822 struct Single {
2824
2825 friend bool operator==(const Single&, const Single&);
2826
2827 void msgpack_unpack(msgpack::object const& o)
2828 {
2829 try {
2830 o.convert(value);
2831 } catch (const msgpack::type_error&) {
2832 std::cerr << o << std::endl;
2833 throw_or_abort("error converting into newtype 'Single'");
2834 }
2835 }
2836 };
2837
2838 struct Array {
2839 std::vector<Acir::Expression> value;
2840
2841 friend bool operator==(const Array&, const Array&);
2842
2843 void msgpack_unpack(msgpack::object const& o)
2844 {
2845 try {
2846 o.convert(value);
2847 } catch (const msgpack::type_error&) {
2848 std::cerr << o << std::endl;
2849 throw_or_abort("error converting into newtype 'Array'");
2850 }
2851 }
2852 };
2853
2856
2857 friend bool operator==(const MemoryArray&, const MemoryArray&);
2858
2859 void msgpack_unpack(msgpack::object const& o)
2860 {
2861 try {
2862 o.convert(value);
2863 } catch (const msgpack::type_error&) {
2864 std::cerr << o << std::endl;
2865 throw_or_abort("error converting into newtype 'MemoryArray'");
2866 }
2867 }
2868 };
2869
2871
2872 friend bool operator==(const BrilligInputs&, const BrilligInputs&);
2873
2874 void msgpack_unpack(msgpack::object const& o)
2875 {
2876
2877 if (o.type != msgpack::type::object_type::MAP && o.type != msgpack::type::object_type::STR) {
2878 std::cerr << o << std::endl;
2879 throw_or_abort("expected MAP or STR for enum 'BrilligInputs'; got type " + std::to_string(o.type));
2880 }
2881 if (o.type == msgpack::type::object_type::MAP && o.via.map.size != 1) {
2882 throw_or_abort("expected 1 entry for enum 'BrilligInputs'; got " + std::to_string(o.via.map.size));
2883 }
2884 std::string tag;
2885 try {
2886 if (o.type == msgpack::type::object_type::MAP) {
2887 o.via.map.ptr[0].key.convert(tag);
2888 } else {
2889 o.convert(tag);
2890 }
2891 } catch (const msgpack::type_error&) {
2892 std::cerr << o << std::endl;
2893 throw_or_abort("error converting tag to string for enum 'BrilligInputs'");
2894 }
2895 if (tag == "Single") {
2896 Single v;
2897 try {
2898 o.via.map.ptr[0].val.convert(v);
2899 } catch (const msgpack::type_error&) {
2900 std::cerr << o << std::endl;
2901 throw_or_abort("error converting into enum variant 'BrilligInputs::Single'");
2902 }
2903
2904 value = v;
2905 } else if (tag == "Array") {
2906 Array v;
2907 try {
2908 o.via.map.ptr[0].val.convert(v);
2909 } catch (const msgpack::type_error&) {
2910 std::cerr << o << std::endl;
2911 throw_or_abort("error converting into enum variant 'BrilligInputs::Array'");
2912 }
2913
2914 value = v;
2915 } else if (tag == "MemoryArray") {
2916 MemoryArray v;
2917 try {
2918 o.via.map.ptr[0].val.convert(v);
2919 } catch (const msgpack::type_error&) {
2920 std::cerr << o << std::endl;
2921 throw_or_abort("error converting into enum variant 'BrilligInputs::MemoryArray'");
2922 }
2923
2924 value = v;
2925 } else {
2926 std::cerr << o << std::endl;
2927 throw_or_abort("unknown 'BrilligInputs' enum variant: " + tag);
2928 }
2929 }
2930};
2931
2933
2934 struct Simple {
2936
2937 friend bool operator==(const Simple&, const Simple&);
2938
2939 void msgpack_unpack(msgpack::object const& o)
2940 {
2941 try {
2942 o.convert(value);
2943 } catch (const msgpack::type_error&) {
2944 std::cerr << o << std::endl;
2945 throw_or_abort("error converting into newtype 'Simple'");
2946 }
2947 }
2948 };
2949
2950 struct Array {
2951 std::vector<Acir::Witness> value;
2952
2953 friend bool operator==(const Array&, const Array&);
2954
2955 void msgpack_unpack(msgpack::object const& o)
2956 {
2957 try {
2958 o.convert(value);
2959 } catch (const msgpack::type_error&) {
2960 std::cerr << o << std::endl;
2961 throw_or_abort("error converting into newtype 'Array'");
2962 }
2963 }
2964 };
2965
2967
2968 friend bool operator==(const BrilligOutputs&, const BrilligOutputs&);
2969
2970 void msgpack_unpack(msgpack::object const& o)
2971 {
2972
2973 if (o.type != msgpack::type::object_type::MAP && o.type != msgpack::type::object_type::STR) {
2974 std::cerr << o << std::endl;
2975 throw_or_abort("expected MAP or STR for enum 'BrilligOutputs'; got type " + std::to_string(o.type));
2976 }
2977 if (o.type == msgpack::type::object_type::MAP && o.via.map.size != 1) {
2978 throw_or_abort("expected 1 entry for enum 'BrilligOutputs'; got " + std::to_string(o.via.map.size));
2979 }
2980 std::string tag;
2981 try {
2982 if (o.type == msgpack::type::object_type::MAP) {
2983 o.via.map.ptr[0].key.convert(tag);
2984 } else {
2985 o.convert(tag);
2986 }
2987 } catch (const msgpack::type_error&) {
2988 std::cerr << o << std::endl;
2989 throw_or_abort("error converting tag to string for enum 'BrilligOutputs'");
2990 }
2991 if (tag == "Simple") {
2992 Simple v;
2993 try {
2994 o.via.map.ptr[0].val.convert(v);
2995 } catch (const msgpack::type_error&) {
2996 std::cerr << o << std::endl;
2997 throw_or_abort("error converting into enum variant 'BrilligOutputs::Simple'");
2998 }
2999
3000 value = v;
3001 } else if (tag == "Array") {
3002 Array v;
3003 try {
3004 o.via.map.ptr[0].val.convert(v);
3005 } catch (const msgpack::type_error&) {
3006 std::cerr << o << std::endl;
3007 throw_or_abort("error converting into enum variant 'BrilligOutputs::Array'");
3008 }
3009
3010 value = v;
3011 } else {
3012 std::cerr << o << std::endl;
3013 throw_or_abort("unknown 'BrilligOutputs' enum variant: " + tag);
3014 }
3015 }
3016};
3017
3018struct MemOp {
3022
3023 friend bool operator==(const MemOp&, const MemOp&);
3024
3025 void msgpack_unpack(msgpack::object const& o)
3026 {
3027 std::string name = "MemOp";
3028 if (o.type == msgpack::type::MAP) {
3029 auto kvmap = Helpers::make_kvmap(o, name);
3030 Helpers::conv_fld_from_kvmap(kvmap, name, "operation", operation, false);
3031 Helpers::conv_fld_from_kvmap(kvmap, name, "index", index, false);
3032 Helpers::conv_fld_from_kvmap(kvmap, name, "value", value, false);
3033 } else if (o.type == msgpack::type::ARRAY) {
3034 auto array = o.via.array;
3035 Helpers::conv_fld_from_array(array, name, "operation", operation, 0);
3036 Helpers::conv_fld_from_array(array, name, "index", index, 1);
3037 Helpers::conv_fld_from_array(array, name, "value", value, 2);
3038 } else {
3039 throw_or_abort("expected MAP or ARRAY for " + name);
3040 }
3041 }
3042};
3043
3044struct Opcode {
3045
3046 struct AssertZero {
3048
3049 friend bool operator==(const AssertZero&, const AssertZero&);
3050
3051 void msgpack_unpack(msgpack::object const& o)
3052 {
3053 try {
3054 o.convert(value);
3055 } catch (const msgpack::type_error&) {
3056 std::cerr << o << std::endl;
3057 throw_or_abort("error converting into newtype 'AssertZero'");
3058 }
3059 }
3060 };
3061
3064
3065 friend bool operator==(const BlackBoxFuncCall&, const BlackBoxFuncCall&);
3066
3067 void msgpack_unpack(msgpack::object const& o)
3068 {
3069 try {
3070 o.convert(value);
3071 } catch (const msgpack::type_error&) {
3072 std::cerr << o << std::endl;
3073 throw_or_abort("error converting into newtype 'BlackBoxFuncCall'");
3074 }
3075 }
3076 };
3077
3078 struct MemoryOp {
3081
3082 friend bool operator==(const MemoryOp&, const MemoryOp&);
3083
3084 void msgpack_unpack(msgpack::object const& o)
3085 {
3086 std::string name = "MemoryOp";
3087 if (o.type == msgpack::type::MAP) {
3088 auto kvmap = Helpers::make_kvmap(o, name);
3089 Helpers::conv_fld_from_kvmap(kvmap, name, "block_id", block_id, false);
3090 Helpers::conv_fld_from_kvmap(kvmap, name, "op", op, false);
3091 } else if (o.type == msgpack::type::ARRAY) {
3092 auto array = o.via.array;
3093 Helpers::conv_fld_from_array(array, name, "block_id", block_id, 0);
3094 Helpers::conv_fld_from_array(array, name, "op", op, 1);
3095 } else {
3096 throw_or_abort("expected MAP or ARRAY for " + name);
3097 }
3098 }
3099 };
3100
3101 struct MemoryInit {
3103 std::vector<Acir::Witness> init;
3105
3106 friend bool operator==(const MemoryInit&, const MemoryInit&);
3107
3108 void msgpack_unpack(msgpack::object const& o)
3109 {
3110 std::string name = "MemoryInit";
3111 if (o.type == msgpack::type::MAP) {
3112 auto kvmap = Helpers::make_kvmap(o, name);
3113 Helpers::conv_fld_from_kvmap(kvmap, name, "block_id", block_id, false);
3114 Helpers::conv_fld_from_kvmap(kvmap, name, "init", init, false);
3115 Helpers::conv_fld_from_kvmap(kvmap, name, "block_type", block_type, false);
3116 } else if (o.type == msgpack::type::ARRAY) {
3117 auto array = o.via.array;
3118 Helpers::conv_fld_from_array(array, name, "block_id", block_id, 0);
3119 Helpers::conv_fld_from_array(array, name, "init", init, 1);
3120 Helpers::conv_fld_from_array(array, name, "block_type", block_type, 2);
3121 } else {
3122 throw_or_abort("expected MAP or ARRAY for " + name);
3123 }
3124 }
3125 };
3126
3128 uint32_t id;
3129 std::vector<Acir::BrilligInputs> inputs;
3130 std::vector<Acir::BrilligOutputs> outputs;
3132
3133 friend bool operator==(const BrilligCall&, const BrilligCall&);
3134
3135 void msgpack_unpack(msgpack::object const& o)
3136 {
3137 std::string name = "BrilligCall";
3138 if (o.type == msgpack::type::MAP) {
3139 auto kvmap = Helpers::make_kvmap(o, name);
3140 Helpers::conv_fld_from_kvmap(kvmap, name, "id", id, false);
3141 Helpers::conv_fld_from_kvmap(kvmap, name, "inputs", inputs, false);
3142 Helpers::conv_fld_from_kvmap(kvmap, name, "outputs", outputs, false);
3143 Helpers::conv_fld_from_kvmap(kvmap, name, "predicate", predicate, true);
3144 } else if (o.type == msgpack::type::ARRAY) {
3145 auto array = o.via.array;
3146 Helpers::conv_fld_from_array(array, name, "id", id, 0);
3147 Helpers::conv_fld_from_array(array, name, "inputs", inputs, 1);
3148 Helpers::conv_fld_from_array(array, name, "outputs", outputs, 2);
3149 Helpers::conv_fld_from_array(array, name, "predicate", predicate, 3);
3150 } else {
3151 throw_or_abort("expected MAP or ARRAY for " + name);
3152 }
3153 }
3154 };
3155
3156 struct Call {
3157 uint32_t id;
3158 std::vector<Acir::Witness> inputs;
3159 std::vector<Acir::Witness> outputs;
3161
3162 friend bool operator==(const Call&, const Call&);
3163
3164 void msgpack_unpack(msgpack::object const& o)
3165 {
3166 std::string name = "Call";
3167 if (o.type == msgpack::type::MAP) {
3168 auto kvmap = Helpers::make_kvmap(o, name);
3169 Helpers::conv_fld_from_kvmap(kvmap, name, "id", id, false);
3170 Helpers::conv_fld_from_kvmap(kvmap, name, "inputs", inputs, false);
3171 Helpers::conv_fld_from_kvmap(kvmap, name, "outputs", outputs, false);
3172 Helpers::conv_fld_from_kvmap(kvmap, name, "predicate", predicate, true);
3173 } else if (o.type == msgpack::type::ARRAY) {
3174 auto array = o.via.array;
3175 Helpers::conv_fld_from_array(array, name, "id", id, 0);
3176 Helpers::conv_fld_from_array(array, name, "inputs", inputs, 1);
3177 Helpers::conv_fld_from_array(array, name, "outputs", outputs, 2);
3178 Helpers::conv_fld_from_array(array, name, "predicate", predicate, 3);
3179 } else {
3180 throw_or_abort("expected MAP or ARRAY for " + name);
3181 }
3182 }
3183 };
3184
3186
3187 friend bool operator==(const Opcode&, const Opcode&);
3188
3189 void msgpack_unpack(msgpack::object const& o)
3190 {
3191
3192 if (o.type != msgpack::type::object_type::MAP && o.type != msgpack::type::object_type::STR) {
3193 std::cerr << o << std::endl;
3194 throw_or_abort("expected MAP or STR for enum 'Opcode'; got type " + std::to_string(o.type));
3195 }
3196 if (o.type == msgpack::type::object_type::MAP && o.via.map.size != 1) {
3197 throw_or_abort("expected 1 entry for enum 'Opcode'; got " + std::to_string(o.via.map.size));
3198 }
3199 std::string tag;
3200 try {
3201 if (o.type == msgpack::type::object_type::MAP) {
3202 o.via.map.ptr[0].key.convert(tag);
3203 } else {
3204 o.convert(tag);
3205 }
3206 } catch (const msgpack::type_error&) {
3207 std::cerr << o << std::endl;
3208 throw_or_abort("error converting tag to string for enum 'Opcode'");
3209 }
3210 if (tag == "AssertZero") {
3211 AssertZero v;
3212 try {
3213 o.via.map.ptr[0].val.convert(v);
3214 } catch (const msgpack::type_error&) {
3215 std::cerr << o << std::endl;
3216 throw_or_abort("error converting into enum variant 'Opcode::AssertZero'");
3217 }
3218
3219 value = v;
3220 } else if (tag == "BlackBoxFuncCall") {
3222 try {
3223 o.via.map.ptr[0].val.convert(v);
3224 } catch (const msgpack::type_error&) {
3225 std::cerr << o << std::endl;
3226 throw_or_abort("error converting into enum variant 'Opcode::BlackBoxFuncCall'");
3227 }
3228
3229 value = v;
3230 } else if (tag == "MemoryOp") {
3231 MemoryOp v;
3232 try {
3233 o.via.map.ptr[0].val.convert(v);
3234 } catch (const msgpack::type_error&) {
3235 std::cerr << o << std::endl;
3236 throw_or_abort("error converting into enum variant 'Opcode::MemoryOp'");
3237 }
3238
3239 value = v;
3240 } else if (tag == "MemoryInit") {
3241 MemoryInit v;
3242 try {
3243 o.via.map.ptr[0].val.convert(v);
3244 } catch (const msgpack::type_error&) {
3245 std::cerr << o << std::endl;
3246 throw_or_abort("error converting into enum variant 'Opcode::MemoryInit'");
3247 }
3248
3249 value = v;
3250 } else if (tag == "BrilligCall") {
3251 BrilligCall v;
3252 try {
3253 o.via.map.ptr[0].val.convert(v);
3254 } catch (const msgpack::type_error&) {
3255 std::cerr << o << std::endl;
3256 throw_or_abort("error converting into enum variant 'Opcode::BrilligCall'");
3257 }
3258
3259 value = v;
3260 } else if (tag == "Call") {
3261 Call v;
3262 try {
3263 o.via.map.ptr[0].val.convert(v);
3264 } catch (const msgpack::type_error&) {
3265 std::cerr << o << std::endl;
3266 throw_or_abort("error converting into enum variant 'Opcode::Call'");
3267 }
3268
3269 value = v;
3270 } else {
3271 std::cerr << o << std::endl;
3272 throw_or_abort("unknown 'Opcode' enum variant: " + tag);
3273 }
3274 }
3275};
3276
3278
3279 struct Expression {
3281
3282 friend bool operator==(const Expression&, const Expression&);
3283
3284 void msgpack_unpack(msgpack::object const& o)
3285 {
3286 try {
3287 o.convert(value);
3288 } catch (const msgpack::type_error&) {
3289 std::cerr << o << std::endl;
3290 throw_or_abort("error converting into newtype 'Expression'");
3291 }
3292 }
3293 };
3294
3295 struct Memory {
3297
3298 friend bool operator==(const Memory&, const Memory&);
3299
3300 void msgpack_unpack(msgpack::object const& o)
3301 {
3302 try {
3303 o.convert(value);
3304 } catch (const msgpack::type_error&) {
3305 std::cerr << o << std::endl;
3306 throw_or_abort("error converting into newtype 'Memory'");
3307 }
3308 }
3309 };
3310
3312
3313 friend bool operator==(const ExpressionOrMemory&, const ExpressionOrMemory&);
3314
3315 void msgpack_unpack(msgpack::object const& o)
3316 {
3317
3318 if (o.type != msgpack::type::object_type::MAP && o.type != msgpack::type::object_type::STR) {
3319 std::cerr << o << std::endl;
3320 throw_or_abort("expected MAP or STR for enum 'ExpressionOrMemory'; got type " + std::to_string(o.type));
3321 }
3322 if (o.type == msgpack::type::object_type::MAP && o.via.map.size != 1) {
3323 throw_or_abort("expected 1 entry for enum 'ExpressionOrMemory'; got " + std::to_string(o.via.map.size));
3324 }
3325 std::string tag;
3326 try {
3327 if (o.type == msgpack::type::object_type::MAP) {
3328 o.via.map.ptr[0].key.convert(tag);
3329 } else {
3330 o.convert(tag);
3331 }
3332 } catch (const msgpack::type_error&) {
3333 std::cerr << o << std::endl;
3334 throw_or_abort("error converting tag to string for enum 'ExpressionOrMemory'");
3335 }
3336 if (tag == "Expression") {
3337 Expression v;
3338 try {
3339 o.via.map.ptr[0].val.convert(v);
3340 } catch (const msgpack::type_error&) {
3341 std::cerr << o << std::endl;
3342 throw_or_abort("error converting into enum variant 'ExpressionOrMemory::Expression'");
3343 }
3344
3345 value = v;
3346 } else if (tag == "Memory") {
3347 Memory v;
3348 try {
3349 o.via.map.ptr[0].val.convert(v);
3350 } catch (const msgpack::type_error&) {
3351 std::cerr << o << std::endl;
3352 throw_or_abort("error converting into enum variant 'ExpressionOrMemory::Memory'");
3353 }
3354
3355 value = v;
3356 } else {
3357 std::cerr << o << std::endl;
3358 throw_or_abort("unknown 'ExpressionOrMemory' enum variant: " + tag);
3359 }
3360 }
3361};
3362
3365 std::vector<Acir::ExpressionOrMemory> payload;
3366
3367 friend bool operator==(const AssertionPayload&, const AssertionPayload&);
3368
3369 void msgpack_unpack(msgpack::object const& o)
3370 {
3371 std::string name = "AssertionPayload";
3372 if (o.type == msgpack::type::MAP) {
3373 auto kvmap = Helpers::make_kvmap(o, name);
3374 Helpers::conv_fld_from_kvmap(kvmap, name, "error_selector", error_selector, false);
3375 Helpers::conv_fld_from_kvmap(kvmap, name, "payload", payload, false);
3376 } else if (o.type == msgpack::type::ARRAY) {
3377 auto array = o.via.array;
3378 Helpers::conv_fld_from_array(array, name, "error_selector", error_selector, 0);
3379 Helpers::conv_fld_from_array(array, name, "payload", payload, 1);
3380 } else {
3381 throw_or_abort("expected MAP or ARRAY for " + name);
3382 }
3383 }
3384};
3385
3387
3388 struct Acir {
3389 uint64_t value;
3390
3391 friend bool operator==(const Acir&, const Acir&);
3392
3393 void msgpack_unpack(msgpack::object const& o)
3394 {
3395 try {
3396 o.convert(value);
3397 } catch (const msgpack::type_error&) {
3398 std::cerr << o << std::endl;
3399 throw_or_abort("error converting into newtype 'Acir'");
3400 }
3401 }
3402 };
3403
3404 struct Brillig {
3405 uint64_t acir_index;
3407
3408 friend bool operator==(const Brillig&, const Brillig&);
3409
3410 void msgpack_unpack(msgpack::object const& o)
3411 {
3412 std::string name = "Brillig";
3413 if (o.type == msgpack::type::MAP) {
3414 auto kvmap = Helpers::make_kvmap(o, name);
3415 Helpers::conv_fld_from_kvmap(kvmap, name, "acir_index", acir_index, false);
3416 Helpers::conv_fld_from_kvmap(kvmap, name, "brillig_index", brillig_index, false);
3417 } else if (o.type == msgpack::type::ARRAY) {
3418 auto array = o.via.array;
3419 Helpers::conv_fld_from_array(array, name, "acir_index", acir_index, 0);
3420 Helpers::conv_fld_from_array(array, name, "brillig_index", brillig_index, 1);
3421 } else {
3422 throw_or_abort("expected MAP or ARRAY for " + name);
3423 }
3424 }
3425 };
3426
3428
3429 friend bool operator==(const OpcodeLocation&, const OpcodeLocation&);
3430
3431 void msgpack_unpack(msgpack::object const& o)
3432 {
3433
3434 if (o.type != msgpack::type::object_type::MAP && o.type != msgpack::type::object_type::STR) {
3435 std::cerr << o << std::endl;
3436 throw_or_abort("expected MAP or STR for enum 'OpcodeLocation'; got type " + std::to_string(o.type));
3437 }
3438 if (o.type == msgpack::type::object_type::MAP && o.via.map.size != 1) {
3439 throw_or_abort("expected 1 entry for enum 'OpcodeLocation'; got " + std::to_string(o.via.map.size));
3440 }
3441 std::string tag;
3442 try {
3443 if (o.type == msgpack::type::object_type::MAP) {
3444 o.via.map.ptr[0].key.convert(tag);
3445 } else {
3446 o.convert(tag);
3447 }
3448 } catch (const msgpack::type_error&) {
3449 std::cerr << o << std::endl;
3450 throw_or_abort("error converting tag to string for enum 'OpcodeLocation'");
3451 }
3452 if (tag == "Acir") {
3453 Acir v;
3454 try {
3455 o.via.map.ptr[0].val.convert(v);
3456 } catch (const msgpack::type_error&) {
3457 std::cerr << o << std::endl;
3458 throw_or_abort("error converting into enum variant 'OpcodeLocation::Acir'");
3459 }
3460
3461 value = v;
3462 } else if (tag == "Brillig") {
3463 Brillig v;
3464 try {
3465 o.via.map.ptr[0].val.convert(v);
3466 } catch (const msgpack::type_error&) {
3467 std::cerr << o << std::endl;
3468 throw_or_abort("error converting into enum variant 'OpcodeLocation::Brillig'");
3469 }
3470
3471 value = v;
3472 } else {
3473 std::cerr << o << std::endl;
3474 throw_or_abort("unknown 'OpcodeLocation' enum variant: " + tag);
3475 }
3476 }
3477};
3478
3480 std::vector<Acir::Witness> value;
3481
3482 friend bool operator==(const PublicInputs&, const PublicInputs&);
3483
3484 void msgpack_unpack(msgpack::object const& o)
3485 {
3486 try {
3487 o.convert(value);
3488 } catch (const msgpack::type_error&) {
3489 std::cerr << o << std::endl;
3490 throw_or_abort("error converting into newtype 'PublicInputs'");
3491 }
3492 }
3493};
3494
3495struct Circuit {
3496 std::string function_name;
3498 std::vector<Acir::Opcode> opcodes;
3499 std::vector<Acir::Witness> private_parameters;
3503
3504 friend bool operator==(const Circuit&, const Circuit&);
3505
3506 void msgpack_unpack(msgpack::object const& o)
3507 {
3508 std::string name = "Circuit";
3509 if (o.type == msgpack::type::MAP) {
3510 auto kvmap = Helpers::make_kvmap(o, name);
3511 Helpers::conv_fld_from_kvmap(kvmap, name, "function_name", function_name, false);
3512 Helpers::conv_fld_from_kvmap(kvmap, name, "current_witness_index", current_witness_index, true);
3513 Helpers::conv_fld_from_kvmap(kvmap, name, "opcodes", opcodes, false);
3514 Helpers::conv_fld_from_kvmap(kvmap, name, "private_parameters", private_parameters, false);
3515 Helpers::conv_fld_from_kvmap(kvmap, name, "public_parameters", public_parameters, false);
3516 Helpers::conv_fld_from_kvmap(kvmap, name, "return_values", return_values, false);
3517 Helpers::conv_fld_from_kvmap(kvmap, name, "assert_messages", assert_messages, false);
3518 } else if (o.type == msgpack::type::ARRAY) {
3519 auto array = o.via.array;
3520 Helpers::conv_fld_from_array(array, name, "function_name", function_name, 0);
3521 Helpers::conv_fld_from_array(array, name, "current_witness_index", current_witness_index, 1);
3522 Helpers::conv_fld_from_array(array, name, "opcodes", opcodes, 2);
3523 Helpers::conv_fld_from_array(array, name, "private_parameters", private_parameters, 3);
3524 Helpers::conv_fld_from_array(array, name, "public_parameters", public_parameters, 4);
3525 Helpers::conv_fld_from_array(array, name, "return_values", return_values, 5);
3526 Helpers::conv_fld_from_array(array, name, "assert_messages", assert_messages, 6);
3527 } else {
3528 throw_or_abort("expected MAP or ARRAY for " + name);
3529 }
3530 }
3531};
3532
3534 std::string function_name;
3535 std::vector<Acir::BrilligOpcode> bytecode;
3536
3537 friend bool operator==(const BrilligBytecode&, const BrilligBytecode&);
3538
3539 void msgpack_unpack(msgpack::object const& o)
3540 {
3541 std::string name = "BrilligBytecode";
3542 if (o.type == msgpack::type::MAP) {
3543 auto kvmap = Helpers::make_kvmap(o, name);
3544 Helpers::conv_fld_from_kvmap(kvmap, name, "function_name", function_name, false);
3545 Helpers::conv_fld_from_kvmap(kvmap, name, "bytecode", bytecode, false);
3546 } else if (o.type == msgpack::type::ARRAY) {
3547 auto array = o.via.array;
3548 Helpers::conv_fld_from_array(array, name, "function_name", function_name, 0);
3549 Helpers::conv_fld_from_array(array, name, "bytecode", bytecode, 1);
3550 } else {
3551 throw_or_abort("expected MAP or ARRAY for " + name);
3552 }
3553 }
3554};
3555
3556struct Program {
3557 std::vector<Acir::Circuit> functions;
3558 std::vector<Acir::BrilligBytecode> unconstrained_functions;
3559
3560 friend bool operator==(const Program&, const Program&);
3561
3562 void msgpack_unpack(msgpack::object const& o)
3563 {
3564 std::string name = "Program";
3565 if (o.type == msgpack::type::MAP) {
3566 auto kvmap = Helpers::make_kvmap(o, name);
3567 Helpers::conv_fld_from_kvmap(kvmap, name, "functions", functions, false);
3568 Helpers::conv_fld_from_kvmap(kvmap, name, "unconstrained_functions", unconstrained_functions, false);
3569 } else if (o.type == msgpack::type::ARRAY) {
3570 auto array = o.via.array;
3571 Helpers::conv_fld_from_array(array, name, "functions", functions, 0);
3572 Helpers::conv_fld_from_array(array, name, "unconstrained_functions", unconstrained_functions, 1);
3573 } else {
3574 throw_or_abort("expected MAP or ARRAY for " + name);
3575 }
3576 }
3577};
3578
3580 std::vector<Acir::Circuit> functions;
3582
3583 friend bool operator==(const ProgramWithoutBrillig&, const ProgramWithoutBrillig&);
3584
3585 void msgpack_unpack(msgpack::object const& o)
3586 {
3587 std::string name = "ProgramWithoutBrillig";
3588 if (o.type == msgpack::type::MAP) {
3589 auto kvmap = Helpers::make_kvmap(o, name);
3590 Helpers::conv_fld_from_kvmap(kvmap, name, "functions", functions, false);
3591 } else if (o.type == msgpack::type::ARRAY) {
3592 auto array = o.via.array;
3593 Helpers::conv_fld_from_array(array, name, "functions", functions, 0);
3594 } else {
3595 throw_or_abort("expected MAP or ARRAY for " + name);
3596 }
3597 }
3598};
3599
3600} // end of namespace Acir
3601
3602namespace Acir {
3603
3604inline bool operator==(const AssertionPayload& lhs, const AssertionPayload& rhs)
3605{
3606 if (!(lhs.error_selector == rhs.error_selector)) {
3607 return false;
3608 }
3609 if (!(lhs.payload == rhs.payload)) {
3610 return false;
3611 }
3612 return true;
3613}
3614
3615} // end of namespace Acir
3616
3617template <>
3618template <typename Serializer>
3620{
3621 serializer.increase_container_depth();
3622 serde::Serializable<decltype(obj.error_selector)>::serialize(obj.error_selector, serializer);
3623 serde::Serializable<decltype(obj.payload)>::serialize(obj.payload, serializer);
3624 serializer.decrease_container_depth();
3625}
3626
3627template <>
3628template <typename Deserializer>
3630{
3631 deserializer.increase_container_depth();
3633 obj.error_selector = serde::Deserializable<decltype(obj.error_selector)>::deserialize(deserializer);
3634 obj.payload = serde::Deserializable<decltype(obj.payload)>::deserialize(deserializer);
3635 deserializer.decrease_container_depth();
3636 return obj;
3637}
3638
3639namespace Acir {
3640
3641inline bool operator==(const BinaryFieldOp& lhs, const BinaryFieldOp& rhs)
3642{
3643 if (!(lhs.value == rhs.value)) {
3644 return false;
3645 }
3646 return true;
3647}
3648
3649} // end of namespace Acir
3650
3651template <>
3652template <typename Serializer>
3654{
3655 serializer.increase_container_depth();
3656 serde::Serializable<decltype(obj.value)>::serialize(obj.value, serializer);
3657 serializer.decrease_container_depth();
3658}
3659
3660template <>
3661template <typename Deserializer>
3663{
3664 deserializer.increase_container_depth();
3666 obj.value = serde::Deserializable<decltype(obj.value)>::deserialize(deserializer);
3667 deserializer.decrease_container_depth();
3668 return obj;
3669}
3670
3671namespace Acir {
3672
3673inline bool operator==(const BinaryFieldOp::Add& lhs, const BinaryFieldOp::Add& rhs)
3674{
3675 return true;
3676}
3677
3678} // end of namespace Acir
3679
3680template <>
3681template <typename Serializer>
3685
3686template <>
3687template <typename Deserializer>
3693
3694namespace Acir {
3695
3696inline bool operator==(const BinaryFieldOp::Sub& lhs, const BinaryFieldOp::Sub& rhs)
3697{
3698 return true;
3699}
3700
3701} // end of namespace Acir
3702
3703template <>
3704template <typename Serializer>
3708
3709template <>
3710template <typename Deserializer>
3716
3717namespace Acir {
3718
3719inline bool operator==(const BinaryFieldOp::Mul& lhs, const BinaryFieldOp::Mul& rhs)
3720{
3721 return true;
3722}
3723
3724} // end of namespace Acir
3725
3726template <>
3727template <typename Serializer>
3731
3732template <>
3733template <typename Deserializer>
3739
3740namespace Acir {
3741
3742inline bool operator==(const BinaryFieldOp::Div& lhs, const BinaryFieldOp::Div& rhs)
3743{
3744 return true;
3745}
3746
3747} // end of namespace Acir
3748
3749template <>
3750template <typename Serializer>
3754
3755template <>
3756template <typename Deserializer>
3762
3763namespace Acir {
3764
3766{
3767 return true;
3768}
3769
3770} // end of namespace Acir
3771
3772template <>
3773template <typename Serializer>
3777
3778template <>
3779template <typename Deserializer>
3786
3787namespace Acir {
3788
3789inline bool operator==(const BinaryFieldOp::Equals& lhs, const BinaryFieldOp::Equals& rhs)
3790{
3791 return true;
3792}
3793
3794} // end of namespace Acir
3795
3796template <>
3797template <typename Serializer>
3801
3802template <>
3803template <typename Deserializer>
3809
3810namespace Acir {
3811
3813{
3814 return true;
3815}
3816
3817} // end of namespace Acir
3818
3819template <>
3820template <typename Serializer>
3824
3825template <>
3826template <typename Deserializer>
3833
3834namespace Acir {
3835
3837{
3838 return true;
3839}
3840
3841} // end of namespace Acir
3842
3843template <>
3844template <typename Serializer>
3848
3849template <>
3850template <typename Deserializer>
3857
3858namespace Acir {
3859
3860inline bool operator==(const BinaryIntOp& lhs, const BinaryIntOp& rhs)
3861{
3862 if (!(lhs.value == rhs.value)) {
3863 return false;
3864 }
3865 return true;
3866}
3867
3868} // end of namespace Acir
3869
3870template <>
3871template <typename Serializer>
3873{
3874 serializer.increase_container_depth();
3875 serde::Serializable<decltype(obj.value)>::serialize(obj.value, serializer);
3876 serializer.decrease_container_depth();
3877}
3878
3879template <>
3880template <typename Deserializer>
3882{
3883 deserializer.increase_container_depth();
3885 obj.value = serde::Deserializable<decltype(obj.value)>::deserialize(deserializer);
3886 deserializer.decrease_container_depth();
3887 return obj;
3888}
3889
3890namespace Acir {
3891
3892inline bool operator==(const BinaryIntOp::Add& lhs, const BinaryIntOp::Add& rhs)
3893{
3894 return true;
3895}
3896
3897} // end of namespace Acir
3898
3899template <>
3900template <typename Serializer>
3903
3904template <>
3905template <typename Deserializer>
3911
3912namespace Acir {
3913
3914inline bool operator==(const BinaryIntOp::Sub& lhs, const BinaryIntOp::Sub& rhs)
3915{
3916 return true;
3917}
3918
3919} // end of namespace Acir
3920
3921template <>
3922template <typename Serializer>
3925
3926template <>
3927template <typename Deserializer>
3933
3934namespace Acir {
3935
3936inline bool operator==(const BinaryIntOp::Mul& lhs, const BinaryIntOp::Mul& rhs)
3937{
3938 return true;
3939}
3940
3941} // end of namespace Acir
3942
3943template <>
3944template <typename Serializer>
3947
3948template <>
3949template <typename Deserializer>
3955
3956namespace Acir {
3957
3958inline bool operator==(const BinaryIntOp::Div& lhs, const BinaryIntOp::Div& rhs)
3959{
3960 return true;
3961}
3962
3963} // end of namespace Acir
3964
3965template <>
3966template <typename Serializer>
3969
3970template <>
3971template <typename Deserializer>
3977
3978namespace Acir {
3979
3980inline bool operator==(const BinaryIntOp::Equals& lhs, const BinaryIntOp::Equals& rhs)
3981{
3982 return true;
3983}
3984
3985} // end of namespace Acir
3986
3987template <>
3988template <typename Serializer>
3992
3993template <>
3994template <typename Deserializer>
4000
4001namespace Acir {
4002
4003inline bool operator==(const BinaryIntOp::LessThan& lhs, const BinaryIntOp::LessThan& rhs)
4004{
4005 return true;
4006}
4007
4008} // end of namespace Acir
4009
4010template <>
4011template <typename Serializer>
4015
4016template <>
4017template <typename Deserializer>
4023
4024namespace Acir {
4025
4027{
4028 return true;
4029}
4030
4031} // end of namespace Acir
4032
4033template <>
4034template <typename Serializer>
4038
4039template <>
4040template <typename Deserializer>
4047
4048namespace Acir {
4049
4050inline bool operator==(const BinaryIntOp::And& lhs, const BinaryIntOp::And& rhs)
4051{
4052 return true;
4053}
4054
4055} // end of namespace Acir
4056
4057template <>
4058template <typename Serializer>
4061
4062template <>
4063template <typename Deserializer>
4069
4070namespace Acir {
4071
4072inline bool operator==(const BinaryIntOp::Or& lhs, const BinaryIntOp::Or& rhs)
4073{
4074 return true;
4075}
4076
4077} // end of namespace Acir
4078
4079template <>
4080template <typename Serializer>
4083
4084template <>
4085template <typename Deserializer>
4087{
4089 return obj;
4090}
4091
4092namespace Acir {
4093
4094inline bool operator==(const BinaryIntOp::Xor& lhs, const BinaryIntOp::Xor& rhs)
4095{
4096 return true;
4097}
4098
4099} // end of namespace Acir
4100
4101template <>
4102template <typename Serializer>
4105
4106template <>
4107template <typename Deserializer>
4113
4114namespace Acir {
4115
4116inline bool operator==(const BinaryIntOp::Shl& lhs, const BinaryIntOp::Shl& rhs)
4117{
4118 return true;
4119}
4120
4121} // end of namespace Acir
4122
4123template <>
4124template <typename Serializer>
4127
4128template <>
4129template <typename Deserializer>
4135
4136namespace Acir {
4137
4138inline bool operator==(const BinaryIntOp::Shr& lhs, const BinaryIntOp::Shr& rhs)
4139{
4140 return true;
4141}
4142
4143} // end of namespace Acir
4144
4145template <>
4146template <typename Serializer>
4149
4150template <>
4151template <typename Deserializer>
4157
4158namespace Acir {
4159
4160inline bool operator==(const BitSize& lhs, const BitSize& rhs)
4161{
4162 if (!(lhs.value == rhs.value)) {
4163 return false;
4164 }
4165 return true;
4166}
4167
4168} // end of namespace Acir
4169
4170template <>
4171template <typename Serializer>
4172void serde::Serializable<Acir::BitSize>::serialize(const Acir::BitSize& obj, Serializer& serializer)
4173{
4174 serializer.increase_container_depth();
4175 serde::Serializable<decltype(obj.value)>::serialize(obj.value, serializer);
4176 serializer.decrease_container_depth();
4177}
4178
4179template <>
4180template <typename Deserializer>
4182{
4183 deserializer.increase_container_depth();
4184 Acir::BitSize obj;
4185 obj.value = serde::Deserializable<decltype(obj.value)>::deserialize(deserializer);
4186 deserializer.decrease_container_depth();
4187 return obj;
4188}
4189
4190namespace Acir {
4191
4192inline bool operator==(const BitSize::Field& lhs, const BitSize::Field& rhs)
4193{
4194 return true;
4195}
4196
4197} // end of namespace Acir
4198
4199template <>
4200template <typename Serializer>
4203
4204template <>
4205template <typename Deserializer>
4207{
4209 return obj;
4210}
4211
4212namespace Acir {
4213
4214inline bool operator==(const BitSize::Integer& lhs, const BitSize::Integer& rhs)
4215{
4216 if (!(lhs.value == rhs.value)) {
4217 return false;
4218 }
4219 return true;
4220}
4221
4222} // end of namespace Acir
4223
4224template <>
4225template <typename Serializer>
4227{
4228 serde::Serializable<decltype(obj.value)>::serialize(obj.value, serializer);
4229}
4230
4231template <>
4232template <typename Deserializer>
4234{
4236 obj.value = serde::Deserializable<decltype(obj.value)>::deserialize(deserializer);
4237 return obj;
4238}
4239
4240namespace Acir {
4241
4242inline bool operator==(const BlackBoxFuncCall& lhs, const BlackBoxFuncCall& rhs)
4243{
4244 if (!(lhs.value == rhs.value)) {
4245 return false;
4246 }
4247 return true;
4248}
4249
4250} // end of namespace Acir
4251
4252template <>
4253template <typename Serializer>
4255{
4256 serializer.increase_container_depth();
4257 serde::Serializable<decltype(obj.value)>::serialize(obj.value, serializer);
4258 serializer.decrease_container_depth();
4259}
4260
4261template <>
4262template <typename Deserializer>
4264{
4265 deserializer.increase_container_depth();
4267 obj.value = serde::Deserializable<decltype(obj.value)>::deserialize(deserializer);
4268 deserializer.decrease_container_depth();
4269 return obj;
4270}
4271
4272namespace Acir {
4273
4275{
4276 if (!(lhs.inputs == rhs.inputs)) {
4277 return false;
4278 }
4279 if (!(lhs.iv == rhs.iv)) {
4280 return false;
4281 }
4282 if (!(lhs.key == rhs.key)) {
4283 return false;
4284 }
4285 if (!(lhs.outputs == rhs.outputs)) {
4286 return false;
4287 }
4288 return true;
4289}
4290
4291} // end of namespace Acir
4292
4293template <>
4294template <typename Serializer>
4296 const Acir::BlackBoxFuncCall::AES128Encrypt& obj, Serializer& serializer)
4297{
4298 serde::Serializable<decltype(obj.inputs)>::serialize(obj.inputs, serializer);
4299 serde::Serializable<decltype(obj.iv)>::serialize(obj.iv, serializer);
4300 serde::Serializable<decltype(obj.key)>::serialize(obj.key, serializer);
4301 serde::Serializable<decltype(obj.outputs)>::serialize(obj.outputs, serializer);
4302}
4303
4304template <>
4305template <typename Deserializer>
4307 Deserializer& deserializer)
4308{
4310 obj.inputs = serde::Deserializable<decltype(obj.inputs)>::deserialize(deserializer);
4311 obj.iv = serde::Deserializable<decltype(obj.iv)>::deserialize(deserializer);
4312 obj.key = serde::Deserializable<decltype(obj.key)>::deserialize(deserializer);
4313 obj.outputs = serde::Deserializable<decltype(obj.outputs)>::deserialize(deserializer);
4314 return obj;
4315}
4316
4317namespace Acir {
4318
4319inline bool operator==(const BlackBoxFuncCall::AND& lhs, const BlackBoxFuncCall::AND& rhs)
4320{
4321 if (!(lhs.lhs == rhs.lhs)) {
4322 return false;
4323 }
4324 if (!(lhs.rhs == rhs.rhs)) {
4325 return false;
4326 }
4327 if (!(lhs.num_bits == rhs.num_bits)) {
4328 return false;
4329 }
4330 if (!(lhs.output == rhs.output)) {
4331 return false;
4332 }
4333 return true;
4334}
4335
4336} // end of namespace Acir
4337
4338template <>
4339template <typename Serializer>
4341 Serializer& serializer)
4342{
4343 serde::Serializable<decltype(obj.lhs)>::serialize(obj.lhs, serializer);
4344 serde::Serializable<decltype(obj.rhs)>::serialize(obj.rhs, serializer);
4345 serde::Serializable<decltype(obj.num_bits)>::serialize(obj.num_bits, serializer);
4346 serde::Serializable<decltype(obj.output)>::serialize(obj.output, serializer);
4347}
4348
4349template <>
4350template <typename Deserializer>
4352{
4354 obj.lhs = serde::Deserializable<decltype(obj.lhs)>::deserialize(deserializer);
4355 obj.rhs = serde::Deserializable<decltype(obj.rhs)>::deserialize(deserializer);
4356 obj.num_bits = serde::Deserializable<decltype(obj.num_bits)>::deserialize(deserializer);
4357 obj.output = serde::Deserializable<decltype(obj.output)>::deserialize(deserializer);
4358 return obj;
4359}
4360
4361namespace Acir {
4362
4363inline bool operator==(const BlackBoxFuncCall::XOR& lhs, const BlackBoxFuncCall::XOR& rhs)
4364{
4365 if (!(lhs.lhs == rhs.lhs)) {
4366 return false;
4367 }
4368 if (!(lhs.rhs == rhs.rhs)) {
4369 return false;
4370 }
4371 if (!(lhs.num_bits == rhs.num_bits)) {
4372 return false;
4373 }
4374 if (!(lhs.output == rhs.output)) {
4375 return false;
4376 }
4377 return true;
4378}
4379
4380} // end of namespace Acir
4381
4382template <>
4383template <typename Serializer>
4385 Serializer& serializer)
4386{
4387 serde::Serializable<decltype(obj.lhs)>::serialize(obj.lhs, serializer);
4388 serde::Serializable<decltype(obj.rhs)>::serialize(obj.rhs, serializer);
4389 serde::Serializable<decltype(obj.num_bits)>::serialize(obj.num_bits, serializer);
4390 serde::Serializable<decltype(obj.output)>::serialize(obj.output, serializer);
4391}
4392
4393template <>
4394template <typename Deserializer>
4396{
4398 obj.lhs = serde::Deserializable<decltype(obj.lhs)>::deserialize(deserializer);
4399 obj.rhs = serde::Deserializable<decltype(obj.rhs)>::deserialize(deserializer);
4400 obj.num_bits = serde::Deserializable<decltype(obj.num_bits)>::deserialize(deserializer);
4401 obj.output = serde::Deserializable<decltype(obj.output)>::deserialize(deserializer);
4402 return obj;
4403}
4404
4405namespace Acir {
4406
4408{
4409 if (!(lhs.input == rhs.input)) {
4410 return false;
4411 }
4412 if (!(lhs.num_bits == rhs.num_bits)) {
4413 return false;
4414 }
4415 return true;
4416}
4417
4418} // end of namespace Acir
4419
4420template <>
4421template <typename Serializer>
4423 Serializer& serializer)
4424{
4425 serde::Serializable<decltype(obj.input)>::serialize(obj.input, serializer);
4426 serde::Serializable<decltype(obj.num_bits)>::serialize(obj.num_bits, serializer);
4427}
4428
4429template <>
4430template <typename Deserializer>
4432 Deserializer& deserializer)
4433{
4435 obj.input = serde::Deserializable<decltype(obj.input)>::deserialize(deserializer);
4436 obj.num_bits = serde::Deserializable<decltype(obj.num_bits)>::deserialize(deserializer);
4437 return obj;
4438}
4439
4440namespace Acir {
4441
4443{
4444 if (!(lhs.inputs == rhs.inputs)) {
4445 return false;
4446 }
4447 if (!(lhs.outputs == rhs.outputs)) {
4448 return false;
4449 }
4450 return true;
4451}
4452
4453} // end of namespace Acir
4454
4455template <>
4456template <typename Serializer>
4458 Serializer& serializer)
4459{
4460 serde::Serializable<decltype(obj.inputs)>::serialize(obj.inputs, serializer);
4461 serde::Serializable<decltype(obj.outputs)>::serialize(obj.outputs, serializer);
4462}
4463
4464template <>
4465template <typename Deserializer>
4467 Deserializer& deserializer)
4468{
4470 obj.inputs = serde::Deserializable<decltype(obj.inputs)>::deserialize(deserializer);
4471 obj.outputs = serde::Deserializable<decltype(obj.outputs)>::deserialize(deserializer);
4472 return obj;
4473}
4474
4475namespace Acir {
4476
4478{
4479 if (!(lhs.inputs == rhs.inputs)) {
4480 return false;
4481 }
4482 if (!(lhs.outputs == rhs.outputs)) {
4483 return false;
4484 }
4485 return true;
4486}
4487
4488} // end of namespace Acir
4489
4490template <>
4491template <typename Serializer>
4493 Serializer& serializer)
4494{
4495 serde::Serializable<decltype(obj.inputs)>::serialize(obj.inputs, serializer);
4496 serde::Serializable<decltype(obj.outputs)>::serialize(obj.outputs, serializer);
4497}
4498
4499template <>
4500template <typename Deserializer>
4502 Deserializer& deserializer)
4503{
4505 obj.inputs = serde::Deserializable<decltype(obj.inputs)>::deserialize(deserializer);
4506 obj.outputs = serde::Deserializable<decltype(obj.outputs)>::deserialize(deserializer);
4507 return obj;
4508}
4509
4510namespace Acir {
4511
4513{
4514 if (!(lhs.public_key_x == rhs.public_key_x)) {
4515 return false;
4516 }
4517 if (!(lhs.public_key_y == rhs.public_key_y)) {
4518 return false;
4519 }
4520 if (!(lhs.signature == rhs.signature)) {
4521 return false;
4522 }
4523 if (!(lhs.hashed_message == rhs.hashed_message)) {
4524 return false;
4525 }
4526 if (!(lhs.predicate == rhs.predicate)) {
4527 return false;
4528 }
4529 if (!(lhs.output == rhs.output)) {
4530 return false;
4531 }
4532 return true;
4533}
4534
4535} // end of namespace Acir
4536
4537template <>
4538template <typename Serializer>
4540 const Acir::BlackBoxFuncCall::EcdsaSecp256k1& obj, Serializer& serializer)
4541{
4542 serde::Serializable<decltype(obj.public_key_x)>::serialize(obj.public_key_x, serializer);
4543 serde::Serializable<decltype(obj.public_key_y)>::serialize(obj.public_key_y, serializer);
4544 serde::Serializable<decltype(obj.signature)>::serialize(obj.signature, serializer);
4545 serde::Serializable<decltype(obj.hashed_message)>::serialize(obj.hashed_message, serializer);
4546 serde::Serializable<decltype(obj.predicate)>::serialize(obj.predicate, serializer);
4547 serde::Serializable<decltype(obj.output)>::serialize(obj.output, serializer);
4548}
4549
4550template <>
4551template <typename Deserializer>
4553 Deserializer& deserializer)
4554{
4556 obj.public_key_x = serde::Deserializable<decltype(obj.public_key_x)>::deserialize(deserializer);
4557 obj.public_key_y = serde::Deserializable<decltype(obj.public_key_y)>::deserialize(deserializer);
4558 obj.signature = serde::Deserializable<decltype(obj.signature)>::deserialize(deserializer);
4559 obj.hashed_message = serde::Deserializable<decltype(obj.hashed_message)>::deserialize(deserializer);
4560 obj.predicate = serde::Deserializable<decltype(obj.predicate)>::deserialize(deserializer);
4561 obj.output = serde::Deserializable<decltype(obj.output)>::deserialize(deserializer);
4562 return obj;
4563}
4564
4565namespace Acir {
4566
4568{
4569 if (!(lhs.public_key_x == rhs.public_key_x)) {
4570 return false;
4571 }
4572 if (!(lhs.public_key_y == rhs.public_key_y)) {
4573 return false;
4574 }
4575 if (!(lhs.signature == rhs.signature)) {
4576 return false;
4577 }
4578 if (!(lhs.hashed_message == rhs.hashed_message)) {
4579 return false;
4580 }
4581 if (!(lhs.predicate == rhs.predicate)) {
4582 return false;
4583 }
4584 if (!(lhs.output == rhs.output)) {
4585 return false;
4586 }
4587 return true;
4588}
4589
4590} // end of namespace Acir
4591
4592template <>
4593template <typename Serializer>
4595 const Acir::BlackBoxFuncCall::EcdsaSecp256r1& obj, Serializer& serializer)
4596{
4597 serde::Serializable<decltype(obj.public_key_x)>::serialize(obj.public_key_x, serializer);
4598 serde::Serializable<decltype(obj.public_key_y)>::serialize(obj.public_key_y, serializer);
4599 serde::Serializable<decltype(obj.signature)>::serialize(obj.signature, serializer);
4600 serde::Serializable<decltype(obj.hashed_message)>::serialize(obj.hashed_message, serializer);
4601 serde::Serializable<decltype(obj.predicate)>::serialize(obj.predicate, serializer);
4602 serde::Serializable<decltype(obj.output)>::serialize(obj.output, serializer);
4603}
4604
4605template <>
4606template <typename Deserializer>
4608 Deserializer& deserializer)
4609{
4611 obj.public_key_x = serde::Deserializable<decltype(obj.public_key_x)>::deserialize(deserializer);
4612 obj.public_key_y = serde::Deserializable<decltype(obj.public_key_y)>::deserialize(deserializer);
4613 obj.signature = serde::Deserializable<decltype(obj.signature)>::deserialize(deserializer);
4614 obj.hashed_message = serde::Deserializable<decltype(obj.hashed_message)>::deserialize(deserializer);
4615 obj.predicate = serde::Deserializable<decltype(obj.predicate)>::deserialize(deserializer);
4616 obj.output = serde::Deserializable<decltype(obj.output)>::deserialize(deserializer);
4617 return obj;
4618}
4619
4620namespace Acir {
4621
4623{
4624 if (!(lhs.points == rhs.points)) {
4625 return false;
4626 }
4627 if (!(lhs.scalars == rhs.scalars)) {
4628 return false;
4629 }
4630 if (!(lhs.predicate == rhs.predicate)) {
4631 return false;
4632 }
4633 if (!(lhs.outputs == rhs.outputs)) {
4634 return false;
4635 }
4636 return true;
4637}
4638
4639} // end of namespace Acir
4640
4641template <>
4642template <typename Serializer>
4644 const Acir::BlackBoxFuncCall::MultiScalarMul& obj, Serializer& serializer)
4645{
4646 serde::Serializable<decltype(obj.points)>::serialize(obj.points, serializer);
4647 serde::Serializable<decltype(obj.scalars)>::serialize(obj.scalars, serializer);
4648 serde::Serializable<decltype(obj.predicate)>::serialize(obj.predicate, serializer);
4649 serde::Serializable<decltype(obj.outputs)>::serialize(obj.outputs, serializer);
4650}
4651
4652template <>
4653template <typename Deserializer>
4655 Deserializer& deserializer)
4656{
4658 obj.points = serde::Deserializable<decltype(obj.points)>::deserialize(deserializer);
4659 obj.scalars = serde::Deserializable<decltype(obj.scalars)>::deserialize(deserializer);
4660 obj.predicate = serde::Deserializable<decltype(obj.predicate)>::deserialize(deserializer);
4661 obj.outputs = serde::Deserializable<decltype(obj.outputs)>::deserialize(deserializer);
4662 return obj;
4663}
4664
4665namespace Acir {
4666
4668{
4669 if (!(lhs.input1 == rhs.input1)) {
4670 return false;
4671 }
4672 if (!(lhs.input2 == rhs.input2)) {
4673 return false;
4674 }
4675 if (!(lhs.predicate == rhs.predicate)) {
4676 return false;
4677 }
4678 if (!(lhs.outputs == rhs.outputs)) {
4679 return false;
4680 }
4681 return true;
4682}
4683
4684} // end of namespace Acir
4685
4686template <>
4687template <typename Serializer>
4689 const Acir::BlackBoxFuncCall::EmbeddedCurveAdd& obj, Serializer& serializer)
4690{
4691 serde::Serializable<decltype(obj.input1)>::serialize(obj.input1, serializer);
4692 serde::Serializable<decltype(obj.input2)>::serialize(obj.input2, serializer);
4693 serde::Serializable<decltype(obj.predicate)>::serialize(obj.predicate, serializer);
4694 serde::Serializable<decltype(obj.outputs)>::serialize(obj.outputs, serializer);
4695}
4696
4697template <>
4698template <typename Deserializer>
4700 Deserializer& deserializer)
4701{
4703 obj.input1 = serde::Deserializable<decltype(obj.input1)>::deserialize(deserializer);
4704 obj.input2 = serde::Deserializable<decltype(obj.input2)>::deserialize(deserializer);
4705 obj.predicate = serde::Deserializable<decltype(obj.predicate)>::deserialize(deserializer);
4706 obj.outputs = serde::Deserializable<decltype(obj.outputs)>::deserialize(deserializer);
4707 return obj;
4708}
4709
4710namespace Acir {
4711
4713{
4714 if (!(lhs.inputs == rhs.inputs)) {
4715 return false;
4716 }
4717 if (!(lhs.outputs == rhs.outputs)) {
4718 return false;
4719 }
4720 return true;
4721}
4722
4723} // end of namespace Acir
4724
4725template <>
4726template <typename Serializer>
4728 Serializer& serializer)
4729{
4730 serde::Serializable<decltype(obj.inputs)>::serialize(obj.inputs, serializer);
4731 serde::Serializable<decltype(obj.outputs)>::serialize(obj.outputs, serializer);
4732}
4733
4734template <>
4735template <typename Deserializer>
4737 Deserializer& deserializer)
4738{
4740 obj.inputs = serde::Deserializable<decltype(obj.inputs)>::deserialize(deserializer);
4741 obj.outputs = serde::Deserializable<decltype(obj.outputs)>::deserialize(deserializer);
4742 return obj;
4743}
4744
4745namespace Acir {
4746
4749{
4750 if (!(lhs.verification_key == rhs.verification_key)) {
4751 return false;
4752 }
4753 if (!(lhs.proof == rhs.proof)) {
4754 return false;
4755 }
4756 if (!(lhs.public_inputs == rhs.public_inputs)) {
4757 return false;
4758 }
4759 if (!(lhs.key_hash == rhs.key_hash)) {
4760 return false;
4761 }
4762 if (!(lhs.proof_type == rhs.proof_type)) {
4763 return false;
4764 }
4765 if (!(lhs.predicate == rhs.predicate)) {
4766 return false;
4767 }
4768 return true;
4769}
4770
4771} // end of namespace Acir
4772
4773template <>
4774template <typename Serializer>
4776 const Acir::BlackBoxFuncCall::RecursiveAggregation& obj, Serializer& serializer)
4777{
4778 serde::Serializable<decltype(obj.verification_key)>::serialize(obj.verification_key, serializer);
4779 serde::Serializable<decltype(obj.proof)>::serialize(obj.proof, serializer);
4780 serde::Serializable<decltype(obj.public_inputs)>::serialize(obj.public_inputs, serializer);
4781 serde::Serializable<decltype(obj.key_hash)>::serialize(obj.key_hash, serializer);
4782 serde::Serializable<decltype(obj.proof_type)>::serialize(obj.proof_type, serializer);
4783 serde::Serializable<decltype(obj.predicate)>::serialize(obj.predicate, serializer);
4784}
4785
4786template <>
4787template <typename Deserializer>
4789 Acir::BlackBoxFuncCall::RecursiveAggregation>::deserialize(Deserializer& deserializer)
4790{
4792 obj.verification_key = serde::Deserializable<decltype(obj.verification_key)>::deserialize(deserializer);
4793 obj.proof = serde::Deserializable<decltype(obj.proof)>::deserialize(deserializer);
4794 obj.public_inputs = serde::Deserializable<decltype(obj.public_inputs)>::deserialize(deserializer);
4795 obj.key_hash = serde::Deserializable<decltype(obj.key_hash)>::deserialize(deserializer);
4796 obj.proof_type = serde::Deserializable<decltype(obj.proof_type)>::deserialize(deserializer);
4797 obj.predicate = serde::Deserializable<decltype(obj.predicate)>::deserialize(deserializer);
4798 return obj;
4799}
4800
4801namespace Acir {
4802
4805{
4806 if (!(lhs.inputs == rhs.inputs)) {
4807 return false;
4808 }
4809 if (!(lhs.outputs == rhs.outputs)) {
4810 return false;
4811 }
4812 return true;
4813}
4814
4815} // end of namespace Acir
4816
4817template <>
4818template <typename Serializer>
4820 const Acir::BlackBoxFuncCall::Poseidon2Permutation& obj, Serializer& serializer)
4821{
4822 serde::Serializable<decltype(obj.inputs)>::serialize(obj.inputs, serializer);
4823 serde::Serializable<decltype(obj.outputs)>::serialize(obj.outputs, serializer);
4824}
4825
4826template <>
4827template <typename Deserializer>
4829 Acir::BlackBoxFuncCall::Poseidon2Permutation>::deserialize(Deserializer& deserializer)
4830{
4832 obj.inputs = serde::Deserializable<decltype(obj.inputs)>::deserialize(deserializer);
4833 obj.outputs = serde::Deserializable<decltype(obj.outputs)>::deserialize(deserializer);
4834 return obj;
4835}
4836
4837namespace Acir {
4838
4840{
4841 if (!(lhs.inputs == rhs.inputs)) {
4842 return false;
4843 }
4844 if (!(lhs.hash_values == rhs.hash_values)) {
4845 return false;
4846 }
4847 if (!(lhs.outputs == rhs.outputs)) {
4848 return false;
4849 }
4850 return true;
4851}
4852
4853} // end of namespace Acir
4854
4855template <>
4856template <typename Serializer>
4858 const Acir::BlackBoxFuncCall::Sha256Compression& obj, Serializer& serializer)
4859{
4860 serde::Serializable<decltype(obj.inputs)>::serialize(obj.inputs, serializer);
4861 serde::Serializable<decltype(obj.hash_values)>::serialize(obj.hash_values, serializer);
4862 serde::Serializable<decltype(obj.outputs)>::serialize(obj.outputs, serializer);
4863}
4864
4865template <>
4866template <typename Deserializer>
4868 Deserializer& deserializer)
4869{
4871 obj.inputs = serde::Deserializable<decltype(obj.inputs)>::deserialize(deserializer);
4872 obj.hash_values = serde::Deserializable<decltype(obj.hash_values)>::deserialize(deserializer);
4873 obj.outputs = serde::Deserializable<decltype(obj.outputs)>::deserialize(deserializer);
4874 return obj;
4875}
4876
4877namespace Acir {
4878
4879inline bool operator==(const BlackBoxOp& lhs, const BlackBoxOp& rhs)
4880{
4881 if (!(lhs.value == rhs.value)) {
4882 return false;
4883 }
4884 return true;
4885}
4886
4887} // end of namespace Acir
4888
4889template <>
4890template <typename Serializer>
4892{
4893 serializer.increase_container_depth();
4894 serde::Serializable<decltype(obj.value)>::serialize(obj.value, serializer);
4895 serializer.decrease_container_depth();
4896}
4897
4898template <>
4899template <typename Deserializer>
4901{
4902 deserializer.increase_container_depth();
4903 Acir::BlackBoxOp obj;
4904 obj.value = serde::Deserializable<decltype(obj.value)>::deserialize(deserializer);
4905 deserializer.decrease_container_depth();
4906 return obj;
4907}
4908
4909namespace Acir {
4910
4912{
4913 if (!(lhs.inputs == rhs.inputs)) {
4914 return false;
4915 }
4916 if (!(lhs.iv == rhs.iv)) {
4917 return false;
4918 }
4919 if (!(lhs.key == rhs.key)) {
4920 return false;
4921 }
4922 if (!(lhs.outputs == rhs.outputs)) {
4923 return false;
4924 }
4925 return true;
4926}
4927
4928} // end of namespace Acir
4929
4930template <>
4931template <typename Serializer>
4933 Serializer& serializer)
4934{
4935 serde::Serializable<decltype(obj.inputs)>::serialize(obj.inputs, serializer);
4936 serde::Serializable<decltype(obj.iv)>::serialize(obj.iv, serializer);
4937 serde::Serializable<decltype(obj.key)>::serialize(obj.key, serializer);
4938 serde::Serializable<decltype(obj.outputs)>::serialize(obj.outputs, serializer);
4939}
4940
4941template <>
4942template <typename Deserializer>
4944 Deserializer& deserializer)
4945{
4947 obj.inputs = serde::Deserializable<decltype(obj.inputs)>::deserialize(deserializer);
4948 obj.iv = serde::Deserializable<decltype(obj.iv)>::deserialize(deserializer);
4949 obj.key = serde::Deserializable<decltype(obj.key)>::deserialize(deserializer);
4950 obj.outputs = serde::Deserializable<decltype(obj.outputs)>::deserialize(deserializer);
4951 return obj;
4952}
4953
4954namespace Acir {
4955
4956inline bool operator==(const BlackBoxOp::Blake2s& lhs, const BlackBoxOp::Blake2s& rhs)
4957{
4958 if (!(lhs.message == rhs.message)) {
4959 return false;
4960 }
4961 if (!(lhs.output == rhs.output)) {
4962 return false;
4963 }
4964 return true;
4965}
4966
4967} // end of namespace Acir
4968
4969template <>
4970template <typename Serializer>
4972 Serializer& serializer)
4973{
4974 serde::Serializable<decltype(obj.message)>::serialize(obj.message, serializer);
4975 serde::Serializable<decltype(obj.output)>::serialize(obj.output, serializer);
4976}
4977
4978template <>
4979template <typename Deserializer>
4981{
4983 obj.message = serde::Deserializable<decltype(obj.message)>::deserialize(deserializer);
4984 obj.output = serde::Deserializable<decltype(obj.output)>::deserialize(deserializer);
4985 return obj;
4986}
4987
4988namespace Acir {
4989
4990inline bool operator==(const BlackBoxOp::Blake3& lhs, const BlackBoxOp::Blake3& rhs)
4991{
4992 if (!(lhs.message == rhs.message)) {
4993 return false;
4994 }
4995 if (!(lhs.output == rhs.output)) {
4996 return false;
4997 }
4998 return true;
4999}
5000
5001} // end of namespace Acir
5002
5003template <>
5004template <typename Serializer>
5006 Serializer& serializer)
5007{
5008 serde::Serializable<decltype(obj.message)>::serialize(obj.message, serializer);
5009 serde::Serializable<decltype(obj.output)>::serialize(obj.output, serializer);
5010}
5011
5012template <>
5013template <typename Deserializer>
5015{
5017 obj.message = serde::Deserializable<decltype(obj.message)>::deserialize(deserializer);
5018 obj.output = serde::Deserializable<decltype(obj.output)>::deserialize(deserializer);
5019 return obj;
5020}
5021
5022namespace Acir {
5023
5025{
5026 if (!(lhs.input == rhs.input)) {
5027 return false;
5028 }
5029 if (!(lhs.output == rhs.output)) {
5030 return false;
5031 }
5032 return true;
5033}
5034
5035} // end of namespace Acir
5036
5037template <>
5038template <typename Serializer>
5040 Serializer& serializer)
5041{
5042 serde::Serializable<decltype(obj.input)>::serialize(obj.input, serializer);
5043 serde::Serializable<decltype(obj.output)>::serialize(obj.output, serializer);
5044}
5045
5046template <>
5047template <typename Deserializer>
5049 Deserializer& deserializer)
5050{
5052 obj.input = serde::Deserializable<decltype(obj.input)>::deserialize(deserializer);
5053 obj.output = serde::Deserializable<decltype(obj.output)>::deserialize(deserializer);
5054 return obj;
5055}
5056
5057namespace Acir {
5058
5060{
5061 if (!(lhs.hashed_msg == rhs.hashed_msg)) {
5062 return false;
5063 }
5064 if (!(lhs.public_key_x == rhs.public_key_x)) {
5065 return false;
5066 }
5067 if (!(lhs.public_key_y == rhs.public_key_y)) {
5068 return false;
5069 }
5070 if (!(lhs.signature == rhs.signature)) {
5071 return false;
5072 }
5073 if (!(lhs.result == rhs.result)) {
5074 return false;
5075 }
5076 return true;
5077}
5078
5079} // end of namespace Acir
5080
5081template <>
5082template <typename Serializer>
5084 Serializer& serializer)
5085{
5086 serde::Serializable<decltype(obj.hashed_msg)>::serialize(obj.hashed_msg, serializer);
5087 serde::Serializable<decltype(obj.public_key_x)>::serialize(obj.public_key_x, serializer);
5088 serde::Serializable<decltype(obj.public_key_y)>::serialize(obj.public_key_y, serializer);
5089 serde::Serializable<decltype(obj.signature)>::serialize(obj.signature, serializer);
5090 serde::Serializable<decltype(obj.result)>::serialize(obj.result, serializer);
5091}
5092
5093template <>
5094template <typename Deserializer>
5096 Deserializer& deserializer)
5097{
5099 obj.hashed_msg = serde::Deserializable<decltype(obj.hashed_msg)>::deserialize(deserializer);
5100 obj.public_key_x = serde::Deserializable<decltype(obj.public_key_x)>::deserialize(deserializer);
5101 obj.public_key_y = serde::Deserializable<decltype(obj.public_key_y)>::deserialize(deserializer);
5102 obj.signature = serde::Deserializable<decltype(obj.signature)>::deserialize(deserializer);
5103 obj.result = serde::Deserializable<decltype(obj.result)>::deserialize(deserializer);
5104 return obj;
5105}
5106
5107namespace Acir {
5108
5110{
5111 if (!(lhs.hashed_msg == rhs.hashed_msg)) {
5112 return false;
5113 }
5114 if (!(lhs.public_key_x == rhs.public_key_x)) {
5115 return false;
5116 }
5117 if (!(lhs.public_key_y == rhs.public_key_y)) {
5118 return false;
5119 }
5120 if (!(lhs.signature == rhs.signature)) {
5121 return false;
5122 }
5123 if (!(lhs.result == rhs.result)) {
5124 return false;
5125 }
5126 return true;
5127}
5128
5129} // end of namespace Acir
5130
5131template <>
5132template <typename Serializer>
5134 Serializer& serializer)
5135{
5136 serde::Serializable<decltype(obj.hashed_msg)>::serialize(obj.hashed_msg, serializer);
5137 serde::Serializable<decltype(obj.public_key_x)>::serialize(obj.public_key_x, serializer);
5138 serde::Serializable<decltype(obj.public_key_y)>::serialize(obj.public_key_y, serializer);
5139 serde::Serializable<decltype(obj.signature)>::serialize(obj.signature, serializer);
5140 serde::Serializable<decltype(obj.result)>::serialize(obj.result, serializer);
5141}
5142
5143template <>
5144template <typename Deserializer>
5146 Deserializer& deserializer)
5147{
5149 obj.hashed_msg = serde::Deserializable<decltype(obj.hashed_msg)>::deserialize(deserializer);
5150 obj.public_key_x = serde::Deserializable<decltype(obj.public_key_x)>::deserialize(deserializer);
5151 obj.public_key_y = serde::Deserializable<decltype(obj.public_key_y)>::deserialize(deserializer);
5152 obj.signature = serde::Deserializable<decltype(obj.signature)>::deserialize(deserializer);
5153 obj.result = serde::Deserializable<decltype(obj.result)>::deserialize(deserializer);
5154 return obj;
5155}
5156
5157namespace Acir {
5158
5160{
5161 if (!(lhs.points == rhs.points)) {
5162 return false;
5163 }
5164 if (!(lhs.scalars == rhs.scalars)) {
5165 return false;
5166 }
5167 if (!(lhs.outputs == rhs.outputs)) {
5168 return false;
5169 }
5170 return true;
5171}
5172
5173} // end of namespace Acir
5174
5175template <>
5176template <typename Serializer>
5178 Serializer& serializer)
5179{
5180 serde::Serializable<decltype(obj.points)>::serialize(obj.points, serializer);
5181 serde::Serializable<decltype(obj.scalars)>::serialize(obj.scalars, serializer);
5182 serde::Serializable<decltype(obj.outputs)>::serialize(obj.outputs, serializer);
5183}
5184
5185template <>
5186template <typename Deserializer>
5188 Deserializer& deserializer)
5189{
5191 obj.points = serde::Deserializable<decltype(obj.points)>::deserialize(deserializer);
5192 obj.scalars = serde::Deserializable<decltype(obj.scalars)>::deserialize(deserializer);
5193 obj.outputs = serde::Deserializable<decltype(obj.outputs)>::deserialize(deserializer);
5194 return obj;
5195}
5196
5197namespace Acir {
5198
5200{
5201 if (!(lhs.input1_x == rhs.input1_x)) {
5202 return false;
5203 }
5204 if (!(lhs.input1_y == rhs.input1_y)) {
5205 return false;
5206 }
5207 if (!(lhs.input1_infinite == rhs.input1_infinite)) {
5208 return false;
5209 }
5210 if (!(lhs.input2_x == rhs.input2_x)) {
5211 return false;
5212 }
5213 if (!(lhs.input2_y == rhs.input2_y)) {
5214 return false;
5215 }
5216 if (!(lhs.input2_infinite == rhs.input2_infinite)) {
5217 return false;
5218 }
5219 if (!(lhs.result == rhs.result)) {
5220 return false;
5221 }
5222 return true;
5223}
5224
5225} // end of namespace Acir
5226
5227template <>
5228template <typename Serializer>
5230 Serializer& serializer)
5231{
5232 serde::Serializable<decltype(obj.input1_x)>::serialize(obj.input1_x, serializer);
5233 serde::Serializable<decltype(obj.input1_y)>::serialize(obj.input1_y, serializer);
5234 serde::Serializable<decltype(obj.input1_infinite)>::serialize(obj.input1_infinite, serializer);
5235 serde::Serializable<decltype(obj.input2_x)>::serialize(obj.input2_x, serializer);
5236 serde::Serializable<decltype(obj.input2_y)>::serialize(obj.input2_y, serializer);
5237 serde::Serializable<decltype(obj.input2_infinite)>::serialize(obj.input2_infinite, serializer);
5238 serde::Serializable<decltype(obj.result)>::serialize(obj.result, serializer);
5239}
5240
5241template <>
5242template <typename Deserializer>
5244 Deserializer& deserializer)
5245{
5247 obj.input1_x = serde::Deserializable<decltype(obj.input1_x)>::deserialize(deserializer);
5248 obj.input1_y = serde::Deserializable<decltype(obj.input1_y)>::deserialize(deserializer);
5249 obj.input1_infinite = serde::Deserializable<decltype(obj.input1_infinite)>::deserialize(deserializer);
5250 obj.input2_x = serde::Deserializable<decltype(obj.input2_x)>::deserialize(deserializer);
5251 obj.input2_y = serde::Deserializable<decltype(obj.input2_y)>::deserialize(deserializer);
5252 obj.input2_infinite = serde::Deserializable<decltype(obj.input2_infinite)>::deserialize(deserializer);
5253 obj.result = serde::Deserializable<decltype(obj.result)>::deserialize(deserializer);
5254 return obj;
5255}
5256
5257namespace Acir {
5258
5260{
5261 if (!(lhs.message == rhs.message)) {
5262 return false;
5263 }
5264 if (!(lhs.output == rhs.output)) {
5265 return false;
5266 }
5267 return true;
5268}
5269
5270} // end of namespace Acir
5271
5272template <>
5273template <typename Serializer>
5275 const Acir::BlackBoxOp::Poseidon2Permutation& obj, Serializer& serializer)
5276{
5277 serde::Serializable<decltype(obj.message)>::serialize(obj.message, serializer);
5278 serde::Serializable<decltype(obj.output)>::serialize(obj.output, serializer);
5279}
5280
5281template <>
5282template <typename Deserializer>
5284 Deserializer& deserializer)
5285{
5287 obj.message = serde::Deserializable<decltype(obj.message)>::deserialize(deserializer);
5288 obj.output = serde::Deserializable<decltype(obj.output)>::deserialize(deserializer);
5289 return obj;
5290}
5291
5292namespace Acir {
5293
5295{
5296 if (!(lhs.input == rhs.input)) {
5297 return false;
5298 }
5299 if (!(lhs.hash_values == rhs.hash_values)) {
5300 return false;
5301 }
5302 if (!(lhs.output == rhs.output)) {
5303 return false;
5304 }
5305 return true;
5306}
5307
5308} // end of namespace Acir
5309
5310template <>
5311template <typename Serializer>
5313 Serializer& serializer)
5314{
5315 serde::Serializable<decltype(obj.input)>::serialize(obj.input, serializer);
5316 serde::Serializable<decltype(obj.hash_values)>::serialize(obj.hash_values, serializer);
5317 serde::Serializable<decltype(obj.output)>::serialize(obj.output, serializer);
5318}
5319
5320template <>
5321template <typename Deserializer>
5323 Deserializer& deserializer)
5324{
5326 obj.input = serde::Deserializable<decltype(obj.input)>::deserialize(deserializer);
5327 obj.hash_values = serde::Deserializable<decltype(obj.hash_values)>::deserialize(deserializer);
5328 obj.output = serde::Deserializable<decltype(obj.output)>::deserialize(deserializer);
5329 return obj;
5330}
5331
5332namespace Acir {
5333
5334inline bool operator==(const BlackBoxOp::ToRadix& lhs, const BlackBoxOp::ToRadix& rhs)
5335{
5336 if (!(lhs.input == rhs.input)) {
5337 return false;
5338 }
5339 if (!(lhs.radix == rhs.radix)) {
5340 return false;
5341 }
5342 if (!(lhs.output_pointer == rhs.output_pointer)) {
5343 return false;
5344 }
5345 if (!(lhs.num_limbs == rhs.num_limbs)) {
5346 return false;
5347 }
5348 if (!(lhs.output_bits == rhs.output_bits)) {
5349 return false;
5350 }
5351 return true;
5352}
5353
5354} // end of namespace Acir
5355
5356template <>
5357template <typename Serializer>
5359 Serializer& serializer)
5360{
5361 serde::Serializable<decltype(obj.input)>::serialize(obj.input, serializer);
5362 serde::Serializable<decltype(obj.radix)>::serialize(obj.radix, serializer);
5363 serde::Serializable<decltype(obj.output_pointer)>::serialize(obj.output_pointer, serializer);
5364 serde::Serializable<decltype(obj.num_limbs)>::serialize(obj.num_limbs, serializer);
5365 serde::Serializable<decltype(obj.output_bits)>::serialize(obj.output_bits, serializer);
5366}
5367
5368template <>
5369template <typename Deserializer>
5371{
5373 obj.input = serde::Deserializable<decltype(obj.input)>::deserialize(deserializer);
5374 obj.radix = serde::Deserializable<decltype(obj.radix)>::deserialize(deserializer);
5375 obj.output_pointer = serde::Deserializable<decltype(obj.output_pointer)>::deserialize(deserializer);
5376 obj.num_limbs = serde::Deserializable<decltype(obj.num_limbs)>::deserialize(deserializer);
5377 obj.output_bits = serde::Deserializable<decltype(obj.output_bits)>::deserialize(deserializer);
5378 return obj;
5379}
5380
5381namespace Acir {
5382
5383inline bool operator==(const BlockId& lhs, const BlockId& rhs)
5384{
5385 if (!(lhs.value == rhs.value)) {
5386 return false;
5387 }
5388 return true;
5389}
5390
5391} // end of namespace Acir
5392
5393template <>
5394template <typename Serializer>
5395void serde::Serializable<Acir::BlockId>::serialize(const Acir::BlockId& obj, Serializer& serializer)
5396{
5397 serializer.increase_container_depth();
5398 serde::Serializable<decltype(obj.value)>::serialize(obj.value, serializer);
5399 serializer.decrease_container_depth();
5400}
5401
5402template <>
5403template <typename Deserializer>
5405{
5406 deserializer.increase_container_depth();
5407 Acir::BlockId obj;
5408 obj.value = serde::Deserializable<decltype(obj.value)>::deserialize(deserializer);
5409 deserializer.decrease_container_depth();
5410 return obj;
5411}
5412
5413namespace Acir {
5414
5415inline bool operator==(const BlockType& lhs, const BlockType& rhs)
5416{
5417 if (!(lhs.value == rhs.value)) {
5418 return false;
5419 }
5420 return true;
5421}
5422
5423} // end of namespace Acir
5424
5425template <>
5426template <typename Serializer>
5428{
5429 serializer.increase_container_depth();
5430 serde::Serializable<decltype(obj.value)>::serialize(obj.value, serializer);
5431 serializer.decrease_container_depth();
5432}
5433
5434template <>
5435template <typename Deserializer>
5437{
5438 deserializer.increase_container_depth();
5439 Acir::BlockType obj;
5440 obj.value = serde::Deserializable<decltype(obj.value)>::deserialize(deserializer);
5441 deserializer.decrease_container_depth();
5442 return obj;
5443}
5444
5445namespace Acir {
5446
5447inline bool operator==(const BlockType::Memory& lhs, const BlockType::Memory& rhs)
5448{
5449 return true;
5450}
5451
5452} // end of namespace Acir
5453
5454template <>
5455template <typename Serializer>
5458
5459template <>
5460template <typename Deserializer>
5466
5467namespace Acir {
5468
5469inline bool operator==(const BlockType::CallData& lhs, const BlockType::CallData& rhs)
5470{
5471 if (!(lhs.value == rhs.value)) {
5472 return false;
5473 }
5474 return true;
5475}
5476
5477} // end of namespace Acir
5478
5479template <>
5480template <typename Serializer>
5482 Serializer& serializer)
5483{
5484 serde::Serializable<decltype(obj.value)>::serialize(obj.value, serializer);
5485}
5486
5487template <>
5488template <typename Deserializer>
5490{
5492 obj.value = serde::Deserializable<decltype(obj.value)>::deserialize(deserializer);
5493 return obj;
5494}
5495
5496namespace Acir {
5497
5498inline bool operator==(const BlockType::ReturnData& lhs, const BlockType::ReturnData& rhs)
5499{
5500 return true;
5501}
5502
5503} // end of namespace Acir
5504
5505template <>
5506template <typename Serializer>
5510
5511template <>
5512template <typename Deserializer>
5518
5519namespace Acir {
5520
5521inline bool operator==(const BrilligBytecode& lhs, const BrilligBytecode& rhs)
5522{
5523 if (!(lhs.function_name == rhs.function_name)) {
5524 return false;
5525 }
5526 if (!(lhs.bytecode == rhs.bytecode)) {
5527 return false;
5528 }
5529 return true;
5530}
5531
5532} // end of namespace Acir
5533
5534template <>
5535template <typename Serializer>
5537{
5538 serializer.increase_container_depth();
5539 serde::Serializable<decltype(obj.function_name)>::serialize(obj.function_name, serializer);
5540 serde::Serializable<decltype(obj.bytecode)>::serialize(obj.bytecode, serializer);
5541 serializer.decrease_container_depth();
5542}
5543
5544template <>
5545template <typename Deserializer>
5547{
5548 deserializer.increase_container_depth();
5550 obj.function_name = serde::Deserializable<decltype(obj.function_name)>::deserialize(deserializer);
5551 obj.bytecode = serde::Deserializable<decltype(obj.bytecode)>::deserialize(deserializer);
5552 deserializer.decrease_container_depth();
5553 return obj;
5554}
5555
5556namespace Acir {
5557
5558inline bool operator==(const BrilligInputs& lhs, const BrilligInputs& rhs)
5559{
5560 if (!(lhs.value == rhs.value)) {
5561 return false;
5562 }
5563 return true;
5564}
5565
5566} // end of namespace Acir
5567
5568template <>
5569template <typename Serializer>
5571{
5572 serializer.increase_container_depth();
5573 serde::Serializable<decltype(obj.value)>::serialize(obj.value, serializer);
5574 serializer.decrease_container_depth();
5575}
5576
5577template <>
5578template <typename Deserializer>
5580{
5581 deserializer.increase_container_depth();
5583 obj.value = serde::Deserializable<decltype(obj.value)>::deserialize(deserializer);
5584 deserializer.decrease_container_depth();
5585 return obj;
5586}
5587
5588namespace Acir {
5589
5590inline bool operator==(const BrilligInputs::Single& lhs, const BrilligInputs::Single& rhs)
5591{
5592 if (!(lhs.value == rhs.value)) {
5593 return false;
5594 }
5595 return true;
5596}
5597
5598} // end of namespace Acir
5599
5600template <>
5601template <typename Serializer>
5603 Serializer& serializer)
5604{
5605 serde::Serializable<decltype(obj.value)>::serialize(obj.value, serializer);
5606}
5607
5608template <>
5609template <typename Deserializer>
5611{
5613 obj.value = serde::Deserializable<decltype(obj.value)>::deserialize(deserializer);
5614 return obj;
5615}
5616
5617namespace Acir {
5618
5619inline bool operator==(const BrilligInputs::Array& lhs, const BrilligInputs::Array& rhs)
5620{
5621 if (!(lhs.value == rhs.value)) {
5622 return false;
5623 }
5624 return true;
5625}
5626
5627} // end of namespace Acir
5628
5629template <>
5630template <typename Serializer>
5632 Serializer& serializer)
5633{
5634 serde::Serializable<decltype(obj.value)>::serialize(obj.value, serializer);
5635}
5636
5637template <>
5638template <typename Deserializer>
5640{
5642 obj.value = serde::Deserializable<decltype(obj.value)>::deserialize(deserializer);
5643 return obj;
5644}
5645
5646namespace Acir {
5647
5649{
5650 if (!(lhs.value == rhs.value)) {
5651 return false;
5652 }
5653 return true;
5654}
5655
5656} // end of namespace Acir
5657
5658template <>
5659template <typename Serializer>
5661 Serializer& serializer)
5662{
5663 serde::Serializable<decltype(obj.value)>::serialize(obj.value, serializer);
5664}
5665
5666template <>
5667template <typename Deserializer>
5669 Deserializer& deserializer)
5670{
5672 obj.value = serde::Deserializable<decltype(obj.value)>::deserialize(deserializer);
5673 return obj;
5674}
5675
5676namespace Acir {
5677
5678inline bool operator==(const BrilligOpcode& lhs, const BrilligOpcode& rhs)
5679{
5680 if (!(lhs.value == rhs.value)) {
5681 return false;
5682 }
5683 return true;
5684}
5685
5686} // end of namespace Acir
5687
5688template <>
5689template <typename Serializer>
5691{
5692 serializer.increase_container_depth();
5693 serde::Serializable<decltype(obj.value)>::serialize(obj.value, serializer);
5694 serializer.decrease_container_depth();
5695}
5696
5697template <>
5698template <typename Deserializer>
5700{
5701 deserializer.increase_container_depth();
5703 obj.value = serde::Deserializable<decltype(obj.value)>::deserialize(deserializer);
5704 deserializer.decrease_container_depth();
5705 return obj;
5706}
5707
5708namespace Acir {
5709
5711{
5712 if (!(lhs.destination == rhs.destination)) {
5713 return false;
5714 }
5715 if (!(lhs.op == rhs.op)) {
5716 return false;
5717 }
5718 if (!(lhs.lhs == rhs.lhs)) {
5719 return false;
5720 }
5721 if (!(lhs.rhs == rhs.rhs)) {
5722 return false;
5723 }
5724 return true;
5725}
5726
5727} // end of namespace Acir
5728
5729template <>
5730template <typename Serializer>
5732 Serializer& serializer)
5733{
5734 serde::Serializable<decltype(obj.destination)>::serialize(obj.destination, serializer);
5735 serde::Serializable<decltype(obj.op)>::serialize(obj.op, serializer);
5736 serde::Serializable<decltype(obj.lhs)>::serialize(obj.lhs, serializer);
5737 serde::Serializable<decltype(obj.rhs)>::serialize(obj.rhs, serializer);
5738}
5739
5740template <>
5741template <typename Deserializer>
5743 Deserializer& deserializer)
5744{
5746 obj.destination = serde::Deserializable<decltype(obj.destination)>::deserialize(deserializer);
5747 obj.op = serde::Deserializable<decltype(obj.op)>::deserialize(deserializer);
5748 obj.lhs = serde::Deserializable<decltype(obj.lhs)>::deserialize(deserializer);
5749 obj.rhs = serde::Deserializable<decltype(obj.rhs)>::deserialize(deserializer);
5750 return obj;
5751}
5752
5753namespace Acir {
5754
5756{
5757 if (!(lhs.destination == rhs.destination)) {
5758 return false;
5759 }
5760 if (!(lhs.op == rhs.op)) {
5761 return false;
5762 }
5763 if (!(lhs.bit_size == rhs.bit_size)) {
5764 return false;
5765 }
5766 if (!(lhs.lhs == rhs.lhs)) {
5767 return false;
5768 }
5769 if (!(lhs.rhs == rhs.rhs)) {
5770 return false;
5771 }
5772 return true;
5773}
5774
5775} // end of namespace Acir
5776
5777template <>
5778template <typename Serializer>
5780 Serializer& serializer)
5781{
5782 serde::Serializable<decltype(obj.destination)>::serialize(obj.destination, serializer);
5783 serde::Serializable<decltype(obj.op)>::serialize(obj.op, serializer);
5784 serde::Serializable<decltype(obj.bit_size)>::serialize(obj.bit_size, serializer);
5785 serde::Serializable<decltype(obj.lhs)>::serialize(obj.lhs, serializer);
5786 serde::Serializable<decltype(obj.rhs)>::serialize(obj.rhs, serializer);
5787}
5788
5789template <>
5790template <typename Deserializer>
5792 Deserializer& deserializer)
5793{
5795 obj.destination = serde::Deserializable<decltype(obj.destination)>::deserialize(deserializer);
5796 obj.op = serde::Deserializable<decltype(obj.op)>::deserialize(deserializer);
5797 obj.bit_size = serde::Deserializable<decltype(obj.bit_size)>::deserialize(deserializer);
5798 obj.lhs = serde::Deserializable<decltype(obj.lhs)>::deserialize(deserializer);
5799 obj.rhs = serde::Deserializable<decltype(obj.rhs)>::deserialize(deserializer);
5800 return obj;
5801}
5802
5803namespace Acir {
5804
5805inline bool operator==(const BrilligOpcode::Not& lhs, const BrilligOpcode::Not& rhs)
5806{
5807 if (!(lhs.destination == rhs.destination)) {
5808 return false;
5809 }
5810 if (!(lhs.source == rhs.source)) {
5811 return false;
5812 }
5813 if (!(lhs.bit_size == rhs.bit_size)) {
5814 return false;
5815 }
5816 return true;
5817}
5818
5819} // end of namespace Acir
5820
5821template <>
5822template <typename Serializer>
5824 Serializer& serializer)
5825{
5826 serde::Serializable<decltype(obj.destination)>::serialize(obj.destination, serializer);
5827 serde::Serializable<decltype(obj.source)>::serialize(obj.source, serializer);
5828 serde::Serializable<decltype(obj.bit_size)>::serialize(obj.bit_size, serializer);
5829}
5830
5831template <>
5832template <typename Deserializer>
5834{
5836 obj.destination = serde::Deserializable<decltype(obj.destination)>::deserialize(deserializer);
5837 obj.source = serde::Deserializable<decltype(obj.source)>::deserialize(deserializer);
5838 obj.bit_size = serde::Deserializable<decltype(obj.bit_size)>::deserialize(deserializer);
5839 return obj;
5840}
5841
5842namespace Acir {
5843
5844inline bool operator==(const BrilligOpcode::Cast& lhs, const BrilligOpcode::Cast& rhs)
5845{
5846 if (!(lhs.destination == rhs.destination)) {
5847 return false;
5848 }
5849 if (!(lhs.source == rhs.source)) {
5850 return false;
5851 }
5852 if (!(lhs.bit_size == rhs.bit_size)) {
5853 return false;
5854 }
5855 return true;
5856}
5857
5858} // end of namespace Acir
5859
5860template <>
5861template <typename Serializer>
5863 Serializer& serializer)
5864{
5865 serde::Serializable<decltype(obj.destination)>::serialize(obj.destination, serializer);
5866 serde::Serializable<decltype(obj.source)>::serialize(obj.source, serializer);
5867 serde::Serializable<decltype(obj.bit_size)>::serialize(obj.bit_size, serializer);
5868}
5869
5870template <>
5871template <typename Deserializer>
5873{
5875 obj.destination = serde::Deserializable<decltype(obj.destination)>::deserialize(deserializer);
5876 obj.source = serde::Deserializable<decltype(obj.source)>::deserialize(deserializer);
5877 obj.bit_size = serde::Deserializable<decltype(obj.bit_size)>::deserialize(deserializer);
5878 return obj;
5879}
5880
5881namespace Acir {
5882
5883inline bool operator==(const BrilligOpcode::JumpIf& lhs, const BrilligOpcode::JumpIf& rhs)
5884{
5885 if (!(lhs.condition == rhs.condition)) {
5886 return false;
5887 }
5888 if (!(lhs.location == rhs.location)) {
5889 return false;
5890 }
5891 return true;
5892}
5893
5894} // end of namespace Acir
5895
5896template <>
5897template <typename Serializer>
5899 Serializer& serializer)
5900{
5901 serde::Serializable<decltype(obj.condition)>::serialize(obj.condition, serializer);
5902 serde::Serializable<decltype(obj.location)>::serialize(obj.location, serializer);
5903}
5904
5905template <>
5906template <typename Deserializer>
5908{
5910 obj.condition = serde::Deserializable<decltype(obj.condition)>::deserialize(deserializer);
5911 obj.location = serde::Deserializable<decltype(obj.location)>::deserialize(deserializer);
5912 return obj;
5913}
5914
5915namespace Acir {
5916
5917inline bool operator==(const BrilligOpcode::Jump& lhs, const BrilligOpcode::Jump& rhs)
5918{
5919 if (!(lhs.location == rhs.location)) {
5920 return false;
5921 }
5922 return true;
5923}
5924
5925} // end of namespace Acir
5926
5927template <>
5928template <typename Serializer>
5930 Serializer& serializer)
5931{
5932 serde::Serializable<decltype(obj.location)>::serialize(obj.location, serializer);
5933}
5934
5935template <>
5936template <typename Deserializer>
5938{
5940 obj.location = serde::Deserializable<decltype(obj.location)>::deserialize(deserializer);
5941 return obj;
5942}
5943
5944namespace Acir {
5945
5947{
5948 if (!(lhs.destination_address == rhs.destination_address)) {
5949 return false;
5950 }
5951 if (!(lhs.size_address == rhs.size_address)) {
5952 return false;
5953 }
5954 if (!(lhs.offset_address == rhs.offset_address)) {
5955 return false;
5956 }
5957 return true;
5958}
5959
5960} // end of namespace Acir
5961
5962template <>
5963template <typename Serializer>
5965 Serializer& serializer)
5966{
5967 serde::Serializable<decltype(obj.destination_address)>::serialize(obj.destination_address, serializer);
5968 serde::Serializable<decltype(obj.size_address)>::serialize(obj.size_address, serializer);
5969 serde::Serializable<decltype(obj.offset_address)>::serialize(obj.offset_address, serializer);
5970}
5971
5972template <>
5973template <typename Deserializer>
5975 Deserializer& deserializer)
5976{
5978 obj.destination_address = serde::Deserializable<decltype(obj.destination_address)>::deserialize(deserializer);
5979 obj.size_address = serde::Deserializable<decltype(obj.size_address)>::deserialize(deserializer);
5980 obj.offset_address = serde::Deserializable<decltype(obj.offset_address)>::deserialize(deserializer);
5981 return obj;
5982}
5983
5984namespace Acir {
5985
5986inline bool operator==(const BrilligOpcode::Call& lhs, const BrilligOpcode::Call& rhs)
5987{
5988 if (!(lhs.location == rhs.location)) {
5989 return false;
5990 }
5991 return true;
5992}
5993
5994} // end of namespace Acir
5995
5996template <>
5997template <typename Serializer>
5999 Serializer& serializer)
6000{
6001 serde::Serializable<decltype(obj.location)>::serialize(obj.location, serializer);
6002}
6003
6004template <>
6005template <typename Deserializer>
6007{
6009 obj.location = serde::Deserializable<decltype(obj.location)>::deserialize(deserializer);
6010 return obj;
6011}
6012
6013namespace Acir {
6014
6015inline bool operator==(const BrilligOpcode::Const& lhs, const BrilligOpcode::Const& rhs)
6016{
6017 if (!(lhs.destination == rhs.destination)) {
6018 return false;
6019 }
6020 if (!(lhs.bit_size == rhs.bit_size)) {
6021 return false;
6022 }
6023 if (!(lhs.value == rhs.value)) {
6024 return false;
6025 }
6026 return true;
6027}
6028
6029} // end of namespace Acir
6030
6031template <>
6032template <typename Serializer>
6034 Serializer& serializer)
6035{
6036 serde::Serializable<decltype(obj.destination)>::serialize(obj.destination, serializer);
6037 serde::Serializable<decltype(obj.bit_size)>::serialize(obj.bit_size, serializer);
6038 serde::Serializable<decltype(obj.value)>::serialize(obj.value, serializer);
6039}
6040
6041template <>
6042template <typename Deserializer>
6044{
6046 obj.destination = serde::Deserializable<decltype(obj.destination)>::deserialize(deserializer);
6047 obj.bit_size = serde::Deserializable<decltype(obj.bit_size)>::deserialize(deserializer);
6048 obj.value = serde::Deserializable<decltype(obj.value)>::deserialize(deserializer);
6049 return obj;
6050}
6051
6052namespace Acir {
6053
6055{
6056 if (!(lhs.destination_pointer == rhs.destination_pointer)) {
6057 return false;
6058 }
6059 if (!(lhs.bit_size == rhs.bit_size)) {
6060 return false;
6061 }
6062 if (!(lhs.value == rhs.value)) {
6063 return false;
6064 }
6065 return true;
6066}
6067
6068} // end of namespace Acir
6069
6070template <>
6071template <typename Serializer>
6073 Serializer& serializer)
6074{
6075 serde::Serializable<decltype(obj.destination_pointer)>::serialize(obj.destination_pointer, serializer);
6076 serde::Serializable<decltype(obj.bit_size)>::serialize(obj.bit_size, serializer);
6077 serde::Serializable<decltype(obj.value)>::serialize(obj.value, serializer);
6078}
6079
6080template <>
6081template <typename Deserializer>
6083 Deserializer& deserializer)
6084{
6086 obj.destination_pointer = serde::Deserializable<decltype(obj.destination_pointer)>::deserialize(deserializer);
6087 obj.bit_size = serde::Deserializable<decltype(obj.bit_size)>::deserialize(deserializer);
6088 obj.value = serde::Deserializable<decltype(obj.value)>::deserialize(deserializer);
6089 return obj;
6090}
6091
6092namespace Acir {
6093
6094inline bool operator==(const BrilligOpcode::Return& lhs, const BrilligOpcode::Return& rhs)
6095{
6096 return true;
6097}
6098
6099} // end of namespace Acir
6100
6101template <>
6102template <typename Serializer>
6106
6107template <>
6108template <typename Deserializer>
6114
6115namespace Acir {
6116
6118{
6119 if (!(lhs.function == rhs.function)) {
6120 return false;
6121 }
6122 if (!(lhs.destinations == rhs.destinations)) {
6123 return false;
6124 }
6126 return false;
6127 }
6128 if (!(lhs.inputs == rhs.inputs)) {
6129 return false;
6130 }
6131 if (!(lhs.input_value_types == rhs.input_value_types)) {
6132 return false;
6133 }
6134 return true;
6135}
6136
6137} // end of namespace Acir
6138
6139template <>
6140template <typename Serializer>
6142 Serializer& serializer)
6143{
6144 serde::Serializable<decltype(obj.function)>::serialize(obj.function, serializer);
6145 serde::Serializable<decltype(obj.destinations)>::serialize(obj.destinations, serializer);
6146 serde::Serializable<decltype(obj.destination_value_types)>::serialize(obj.destination_value_types, serializer);
6147 serde::Serializable<decltype(obj.inputs)>::serialize(obj.inputs, serializer);
6148 serde::Serializable<decltype(obj.input_value_types)>::serialize(obj.input_value_types, serializer);
6149}
6150
6151template <>
6152template <typename Deserializer>
6154 Deserializer& deserializer)
6155{
6157 obj.function = serde::Deserializable<decltype(obj.function)>::deserialize(deserializer);
6158 obj.destinations = serde::Deserializable<decltype(obj.destinations)>::deserialize(deserializer);
6160 serde::Deserializable<decltype(obj.destination_value_types)>::deserialize(deserializer);
6161 obj.inputs = serde::Deserializable<decltype(obj.inputs)>::deserialize(deserializer);
6162 obj.input_value_types = serde::Deserializable<decltype(obj.input_value_types)>::deserialize(deserializer);
6163 return obj;
6164}
6165
6166namespace Acir {
6167
6168inline bool operator==(const BrilligOpcode::Mov& lhs, const BrilligOpcode::Mov& rhs)
6169{
6170 if (!(lhs.destination == rhs.destination)) {
6171 return false;
6172 }
6173 if (!(lhs.source == rhs.source)) {
6174 return false;
6175 }
6176 return true;
6177}
6178
6179} // end of namespace Acir
6180
6181template <>
6182template <typename Serializer>
6184 Serializer& serializer)
6185{
6186 serde::Serializable<decltype(obj.destination)>::serialize(obj.destination, serializer);
6187 serde::Serializable<decltype(obj.source)>::serialize(obj.source, serializer);
6188}
6189
6190template <>
6191template <typename Deserializer>
6193{
6195 obj.destination = serde::Deserializable<decltype(obj.destination)>::deserialize(deserializer);
6196 obj.source = serde::Deserializable<decltype(obj.source)>::deserialize(deserializer);
6197 return obj;
6198}
6199
6200namespace Acir {
6201
6203{
6204 if (!(lhs.destination == rhs.destination)) {
6205 return false;
6206 }
6207 if (!(lhs.source_a == rhs.source_a)) {
6208 return false;
6209 }
6210 if (!(lhs.source_b == rhs.source_b)) {
6211 return false;
6212 }
6213 if (!(lhs.condition == rhs.condition)) {
6214 return false;
6215 }
6216 return true;
6217}
6218
6219} // end of namespace Acir
6220
6221template <>
6222template <typename Serializer>
6224 Serializer& serializer)
6225{
6226 serde::Serializable<decltype(obj.destination)>::serialize(obj.destination, serializer);
6227 serde::Serializable<decltype(obj.source_a)>::serialize(obj.source_a, serializer);
6228 serde::Serializable<decltype(obj.source_b)>::serialize(obj.source_b, serializer);
6229 serde::Serializable<decltype(obj.condition)>::serialize(obj.condition, serializer);
6230}
6231
6232template <>
6233template <typename Deserializer>
6235 Deserializer& deserializer)
6236{
6238 obj.destination = serde::Deserializable<decltype(obj.destination)>::deserialize(deserializer);
6239 obj.source_a = serde::Deserializable<decltype(obj.source_a)>::deserialize(deserializer);
6240 obj.source_b = serde::Deserializable<decltype(obj.source_b)>::deserialize(deserializer);
6241 obj.condition = serde::Deserializable<decltype(obj.condition)>::deserialize(deserializer);
6242 return obj;
6243}
6244
6245namespace Acir {
6246
6247inline bool operator==(const BrilligOpcode::Load& lhs, const BrilligOpcode::Load& rhs)
6248{
6249 if (!(lhs.destination == rhs.destination)) {
6250 return false;
6251 }
6252 if (!(lhs.source_pointer == rhs.source_pointer)) {
6253 return false;
6254 }
6255 return true;
6256}
6257
6258} // end of namespace Acir
6259
6260template <>
6261template <typename Serializer>
6263 Serializer& serializer)
6264{
6265 serde::Serializable<decltype(obj.destination)>::serialize(obj.destination, serializer);
6266 serde::Serializable<decltype(obj.source_pointer)>::serialize(obj.source_pointer, serializer);
6267}
6268
6269template <>
6270template <typename Deserializer>
6272{
6274 obj.destination = serde::Deserializable<decltype(obj.destination)>::deserialize(deserializer);
6275 obj.source_pointer = serde::Deserializable<decltype(obj.source_pointer)>::deserialize(deserializer);
6276 return obj;
6277}
6278
6279namespace Acir {
6280
6281inline bool operator==(const BrilligOpcode::Store& lhs, const BrilligOpcode::Store& rhs)
6282{
6283 if (!(lhs.destination_pointer == rhs.destination_pointer)) {
6284 return false;
6285 }
6286 if (!(lhs.source == rhs.source)) {
6287 return false;
6288 }
6289 return true;
6290}
6291
6292} // end of namespace Acir
6293
6294template <>
6295template <typename Serializer>
6297 Serializer& serializer)
6298{
6299 serde::Serializable<decltype(obj.destination_pointer)>::serialize(obj.destination_pointer, serializer);
6300 serde::Serializable<decltype(obj.source)>::serialize(obj.source, serializer);
6301}
6302
6303template <>
6304template <typename Deserializer>
6306{
6308 obj.destination_pointer = serde::Deserializable<decltype(obj.destination_pointer)>::deserialize(deserializer);
6309 obj.source = serde::Deserializable<decltype(obj.source)>::deserialize(deserializer);
6310 return obj;
6311}
6312
6313namespace Acir {
6314
6316{
6317 if (!(lhs.value == rhs.value)) {
6318 return false;
6319 }
6320 return true;
6321}
6322
6323} // end of namespace Acir
6324
6325template <>
6326template <typename Serializer>
6328 Serializer& serializer)
6329{
6330 serde::Serializable<decltype(obj.value)>::serialize(obj.value, serializer);
6331}
6332
6333template <>
6334template <typename Deserializer>
6336 Deserializer& deserializer)
6337{
6339 obj.value = serde::Deserializable<decltype(obj.value)>::deserialize(deserializer);
6340 return obj;
6341}
6342
6343namespace Acir {
6344
6345inline bool operator==(const BrilligOpcode::Trap& lhs, const BrilligOpcode::Trap& rhs)
6346{
6347 if (!(lhs.revert_data == rhs.revert_data)) {
6348 return false;
6349 }
6350 return true;
6351}
6352
6353} // end of namespace Acir
6354
6355template <>
6356template <typename Serializer>
6358 Serializer& serializer)
6359{
6360 serde::Serializable<decltype(obj.revert_data)>::serialize(obj.revert_data, serializer);
6361}
6362
6363template <>
6364template <typename Deserializer>
6366{
6368 obj.revert_data = serde::Deserializable<decltype(obj.revert_data)>::deserialize(deserializer);
6369 return obj;
6370}
6371
6372namespace Acir {
6373
6374inline bool operator==(const BrilligOpcode::Stop& lhs, const BrilligOpcode::Stop& rhs)
6375{
6376 if (!(lhs.return_data == rhs.return_data)) {
6377 return false;
6378 }
6379 return true;
6380}
6381
6382} // end of namespace Acir
6383
6384template <>
6385template <typename Serializer>
6387 Serializer& serializer)
6388{
6389 serde::Serializable<decltype(obj.return_data)>::serialize(obj.return_data, serializer);
6390}
6391
6392template <>
6393template <typename Deserializer>
6395{
6397 obj.return_data = serde::Deserializable<decltype(obj.return_data)>::deserialize(deserializer);
6398 return obj;
6399}
6400
6401namespace Acir {
6402
6403inline bool operator==(const BrilligOutputs& lhs, const BrilligOutputs& rhs)
6404{
6405 if (!(lhs.value == rhs.value)) {
6406 return false;
6407 }
6408 return true;
6409}
6410
6411} // end of namespace Acir
6412
6413template <>
6414template <typename Serializer>
6416{
6417 serializer.increase_container_depth();
6418 serde::Serializable<decltype(obj.value)>::serialize(obj.value, serializer);
6419 serializer.decrease_container_depth();
6420}
6421
6422template <>
6423template <typename Deserializer>
6425{
6426 deserializer.increase_container_depth();
6428 obj.value = serde::Deserializable<decltype(obj.value)>::deserialize(deserializer);
6429 deserializer.decrease_container_depth();
6430 return obj;
6431}
6432
6433namespace Acir {
6434
6436{
6437 if (!(lhs.value == rhs.value)) {
6438 return false;
6439 }
6440 return true;
6441}
6442
6443} // end of namespace Acir
6444
6445template <>
6446template <typename Serializer>
6448 Serializer& serializer)
6449{
6450 serde::Serializable<decltype(obj.value)>::serialize(obj.value, serializer);
6451}
6452
6453template <>
6454template <typename Deserializer>
6456 Deserializer& deserializer)
6457{
6459 obj.value = serde::Deserializable<decltype(obj.value)>::deserialize(deserializer);
6460 return obj;
6461}
6462
6463namespace Acir {
6464
6465inline bool operator==(const BrilligOutputs::Array& lhs, const BrilligOutputs::Array& rhs)
6466{
6467 if (!(lhs.value == rhs.value)) {
6468 return false;
6469 }
6470 return true;
6471}
6472
6473} // end of namespace Acir
6474
6475template <>
6476template <typename Serializer>
6478 Serializer& serializer)
6479{
6480 serde::Serializable<decltype(obj.value)>::serialize(obj.value, serializer);
6481}
6482
6483template <>
6484template <typename Deserializer>
6486{
6488 obj.value = serde::Deserializable<decltype(obj.value)>::deserialize(deserializer);
6489 return obj;
6490}
6491
6492namespace Acir {
6493
6494inline bool operator==(const Circuit& lhs, const Circuit& rhs)
6495{
6496 if (!(lhs.function_name == rhs.function_name)) {
6497 return false;
6498 }
6499 if (!(lhs.current_witness_index == rhs.current_witness_index)) {
6500 return false;
6501 }
6502 if (!(lhs.opcodes == rhs.opcodes)) {
6503 return false;
6504 }
6505 if (!(lhs.private_parameters == rhs.private_parameters)) {
6506 return false;
6507 }
6508 if (!(lhs.public_parameters == rhs.public_parameters)) {
6509 return false;
6510 }
6511 if (!(lhs.return_values == rhs.return_values)) {
6512 return false;
6513 }
6514 if (!(lhs.assert_messages == rhs.assert_messages)) {
6515 return false;
6516 }
6517 return true;
6518}
6519
6520} // end of namespace Acir
6521
6522template <>
6523template <typename Serializer>
6524void serde::Serializable<Acir::Circuit>::serialize(const Acir::Circuit& obj, Serializer& serializer)
6525{
6526 serializer.increase_container_depth();
6527 serde::Serializable<decltype(obj.function_name)>::serialize(obj.function_name, serializer);
6528 serde::Serializable<decltype(obj.current_witness_index)>::serialize(obj.current_witness_index, serializer);
6529 serde::Serializable<decltype(obj.opcodes)>::serialize(obj.opcodes, serializer);
6530 serde::Serializable<decltype(obj.private_parameters)>::serialize(obj.private_parameters, serializer);
6531 serde::Serializable<decltype(obj.public_parameters)>::serialize(obj.public_parameters, serializer);
6532 serde::Serializable<decltype(obj.return_values)>::serialize(obj.return_values, serializer);
6533 serde::Serializable<decltype(obj.assert_messages)>::serialize(obj.assert_messages, serializer);
6534 serializer.decrease_container_depth();
6535}
6536
6537template <>
6538template <typename Deserializer>
6540{
6541 deserializer.increase_container_depth();
6542 Acir::Circuit obj;
6543 obj.function_name = serde::Deserializable<decltype(obj.function_name)>::deserialize(deserializer);
6544 obj.current_witness_index = serde::Deserializable<decltype(obj.current_witness_index)>::deserialize(deserializer);
6545 obj.opcodes = serde::Deserializable<decltype(obj.opcodes)>::deserialize(deserializer);
6546 obj.private_parameters = serde::Deserializable<decltype(obj.private_parameters)>::deserialize(deserializer);
6547 obj.public_parameters = serde::Deserializable<decltype(obj.public_parameters)>::deserialize(deserializer);
6548 obj.return_values = serde::Deserializable<decltype(obj.return_values)>::deserialize(deserializer);
6549 obj.assert_messages = serde::Deserializable<decltype(obj.assert_messages)>::deserialize(deserializer);
6550 deserializer.decrease_container_depth();
6551 return obj;
6552}
6553
6554namespace Acir {
6555
6556inline bool operator==(const Expression& lhs, const Expression& rhs)
6557{
6558 if (!(lhs.mul_terms == rhs.mul_terms)) {
6559 return false;
6560 }
6561 if (!(lhs.linear_combinations == rhs.linear_combinations)) {
6562 return false;
6563 }
6564 if (!(lhs.q_c == rhs.q_c)) {
6565 return false;
6566 }
6567 return true;
6568}
6569
6570} // end of namespace Acir
6571
6572template <>
6573template <typename Serializer>
6575{
6576 serializer.increase_container_depth();
6577 serde::Serializable<decltype(obj.mul_terms)>::serialize(obj.mul_terms, serializer);
6578 serde::Serializable<decltype(obj.linear_combinations)>::serialize(obj.linear_combinations, serializer);
6579 serde::Serializable<decltype(obj.q_c)>::serialize(obj.q_c, serializer);
6580 serializer.decrease_container_depth();
6581}
6582
6583template <>
6584template <typename Deserializer>
6586{
6587 deserializer.increase_container_depth();
6588 Acir::Expression obj;
6589 obj.mul_terms = serde::Deserializable<decltype(obj.mul_terms)>::deserialize(deserializer);
6590 obj.linear_combinations = serde::Deserializable<decltype(obj.linear_combinations)>::deserialize(deserializer);
6591 obj.q_c = serde::Deserializable<decltype(obj.q_c)>::deserialize(deserializer);
6592 deserializer.decrease_container_depth();
6593 return obj;
6594}
6595
6596namespace Acir {
6597
6598inline bool operator==(const ExpressionOrMemory& lhs, const ExpressionOrMemory& rhs)
6599{
6600 if (!(lhs.value == rhs.value)) {
6601 return false;
6602 }
6603 return true;
6604}
6605
6606} // end of namespace Acir
6607
6608template <>
6609template <typename Serializer>
6611 Serializer& serializer)
6612{
6613 serializer.increase_container_depth();
6614 serde::Serializable<decltype(obj.value)>::serialize(obj.value, serializer);
6615 serializer.decrease_container_depth();
6616}
6617
6618template <>
6619template <typename Deserializer>
6621{
6622 deserializer.increase_container_depth();
6624 obj.value = serde::Deserializable<decltype(obj.value)>::deserialize(deserializer);
6625 deserializer.decrease_container_depth();
6626 return obj;
6627}
6628
6629namespace Acir {
6630
6632{
6633 if (!(lhs.value == rhs.value)) {
6634 return false;
6635 }
6636 return true;
6637}
6638
6639} // end of namespace Acir
6640
6641template <>
6642template <typename Serializer>
6644 const Acir::ExpressionOrMemory::Expression& obj, Serializer& serializer)
6645{
6646 serde::Serializable<decltype(obj.value)>::serialize(obj.value, serializer);
6647}
6648
6649template <>
6650template <typename Deserializer>
6652 Deserializer& deserializer)
6653{
6655 obj.value = serde::Deserializable<decltype(obj.value)>::deserialize(deserializer);
6656 return obj;
6657}
6658
6659namespace Acir {
6660
6662{
6663 if (!(lhs.value == rhs.value)) {
6664 return false;
6665 }
6666 return true;
6667}
6668
6669} // end of namespace Acir
6670
6671template <>
6672template <typename Serializer>
6674 Serializer& serializer)
6675{
6676 serde::Serializable<decltype(obj.value)>::serialize(obj.value, serializer);
6677}
6678
6679template <>
6680template <typename Deserializer>
6682 Deserializer& deserializer)
6683{
6685 obj.value = serde::Deserializable<decltype(obj.value)>::deserialize(deserializer);
6686 return obj;
6687}
6688
6689namespace Acir {
6690
6691inline bool operator==(const FunctionInput& lhs, const FunctionInput& rhs)
6692{
6693 if (!(lhs.value == rhs.value)) {
6694 return false;
6695 }
6696 return true;
6697}
6698
6699} // end of namespace Acir
6700
6701template <>
6702template <typename Serializer>
6704{
6705 serializer.increase_container_depth();
6706 serde::Serializable<decltype(obj.value)>::serialize(obj.value, serializer);
6707 serializer.decrease_container_depth();
6708}
6709
6710template <>
6711template <typename Deserializer>
6713{
6714 deserializer.increase_container_depth();
6716 obj.value = serde::Deserializable<decltype(obj.value)>::deserialize(deserializer);
6717 deserializer.decrease_container_depth();
6718 return obj;
6719}
6720
6721namespace Acir {
6722
6724{
6725 if (!(lhs.value == rhs.value)) {
6726 return false;
6727 }
6728 return true;
6729}
6730
6731} // end of namespace Acir
6732
6733template <>
6734template <typename Serializer>
6736 Serializer& serializer)
6737{
6738 serde::Serializable<decltype(obj.value)>::serialize(obj.value, serializer);
6739}
6740
6741template <>
6742template <typename Deserializer>
6744 Deserializer& deserializer)
6745{
6747 obj.value = serde::Deserializable<decltype(obj.value)>::deserialize(deserializer);
6748 return obj;
6749}
6750
6751namespace Acir {
6752
6754{
6755 if (!(lhs.value == rhs.value)) {
6756 return false;
6757 }
6758 return true;
6759}
6760
6761} // end of namespace Acir
6762
6763template <>
6764template <typename Serializer>
6766 Serializer& serializer)
6767{
6768 serde::Serializable<decltype(obj.value)>::serialize(obj.value, serializer);
6769}
6770
6771template <>
6772template <typename Deserializer>
6774 Deserializer& deserializer)
6775{
6777 obj.value = serde::Deserializable<decltype(obj.value)>::deserialize(deserializer);
6778 return obj;
6779}
6780
6781namespace Acir {
6782
6783inline bool operator==(const HeapArray& lhs, const HeapArray& rhs)
6784{
6785 if (!(lhs.pointer == rhs.pointer)) {
6786 return false;
6787 }
6788 if (!(lhs.size == rhs.size)) {
6789 return false;
6790 }
6791 return true;
6792}
6793
6794} // end of namespace Acir
6795
6796template <>
6797template <typename Serializer>
6799{
6800 serializer.increase_container_depth();
6801 serde::Serializable<decltype(obj.pointer)>::serialize(obj.pointer, serializer);
6802 serde::Serializable<decltype(obj.size)>::serialize(obj.size, serializer);
6803 serializer.decrease_container_depth();
6804}
6805
6806template <>
6807template <typename Deserializer>
6809{
6810 deserializer.increase_container_depth();
6811 Acir::HeapArray obj;
6812 obj.pointer = serde::Deserializable<decltype(obj.pointer)>::deserialize(deserializer);
6813 obj.size = serde::Deserializable<decltype(obj.size)>::deserialize(deserializer);
6814 deserializer.decrease_container_depth();
6815 return obj;
6816}
6817
6818namespace Acir {
6819
6820inline bool operator==(const HeapValueType& lhs, const HeapValueType& rhs)
6821{
6822 if (!(lhs.value == rhs.value)) {
6823 return false;
6824 }
6825 return true;
6826}
6827
6828} // end of namespace Acir
6829
6830template <>
6831template <typename Serializer>
6833{
6834 serializer.increase_container_depth();
6835 serde::Serializable<decltype(obj.value)>::serialize(obj.value, serializer);
6836 serializer.decrease_container_depth();
6837}
6838
6839template <>
6840template <typename Deserializer>
6842{
6843 deserializer.increase_container_depth();
6845 obj.value = serde::Deserializable<decltype(obj.value)>::deserialize(deserializer);
6846 deserializer.decrease_container_depth();
6847 return obj;
6848}
6849
6850namespace Acir {
6851
6852inline bool operator==(const HeapValueType::Simple& lhs, const HeapValueType::Simple& rhs)
6853{
6854 if (!(lhs.value == rhs.value)) {
6855 return false;
6856 }
6857 return true;
6858}
6859
6860} // end of namespace Acir
6861
6862template <>
6863template <typename Serializer>
6865 Serializer& serializer)
6866{
6867 serde::Serializable<decltype(obj.value)>::serialize(obj.value, serializer);
6868}
6869
6870template <>
6871template <typename Deserializer>
6873{
6875 obj.value = serde::Deserializable<decltype(obj.value)>::deserialize(deserializer);
6876 return obj;
6877}
6878
6879namespace Acir {
6880
6881inline bool operator==(const HeapValueType::Array& lhs, const HeapValueType::Array& rhs)
6882{
6883 if (!(lhs.value_types == rhs.value_types)) {
6884 return false;
6885 }
6886 if (!(lhs.size == rhs.size)) {
6887 return false;
6888 }
6889 return true;
6890}
6891
6892} // end of namespace Acir
6893
6894template <>
6895template <typename Serializer>
6897 Serializer& serializer)
6898{
6899 serde::Serializable<decltype(obj.value_types)>::serialize(obj.value_types, serializer);
6900 serde::Serializable<decltype(obj.size)>::serialize(obj.size, serializer);
6901}
6902
6903template <>
6904template <typename Deserializer>
6906{
6908 obj.value_types = serde::Deserializable<decltype(obj.value_types)>::deserialize(deserializer);
6909 obj.size = serde::Deserializable<decltype(obj.size)>::deserialize(deserializer);
6910 return obj;
6911}
6912
6913namespace Acir {
6914
6915inline bool operator==(const HeapValueType::Vector& lhs, const HeapValueType::Vector& rhs)
6916{
6917 if (!(lhs.value_types == rhs.value_types)) {
6918 return false;
6919 }
6920 return true;
6921}
6922
6923} // end of namespace Acir
6924
6925template <>
6926template <typename Serializer>
6928 Serializer& serializer)
6929{
6930 serde::Serializable<decltype(obj.value_types)>::serialize(obj.value_types, serializer);
6931}
6932
6933template <>
6934template <typename Deserializer>
6936{
6938 obj.value_types = serde::Deserializable<decltype(obj.value_types)>::deserialize(deserializer);
6939 return obj;
6940}
6941
6942namespace Acir {
6943
6944inline bool operator==(const HeapVector& lhs, const HeapVector& rhs)
6945{
6946 if (!(lhs.pointer == rhs.pointer)) {
6947 return false;
6948 }
6949 if (!(lhs.size == rhs.size)) {
6950 return false;
6951 }
6952 return true;
6953}
6954
6955} // end of namespace Acir
6956
6957template <>
6958template <typename Serializer>
6960{
6961 serializer.increase_container_depth();
6962 serde::Serializable<decltype(obj.pointer)>::serialize(obj.pointer, serializer);
6963 serde::Serializable<decltype(obj.size)>::serialize(obj.size, serializer);
6964 serializer.decrease_container_depth();
6965}
6966
6967template <>
6968template <typename Deserializer>
6970{
6971 deserializer.increase_container_depth();
6972 Acir::HeapVector obj;
6973 obj.pointer = serde::Deserializable<decltype(obj.pointer)>::deserialize(deserializer);
6974 obj.size = serde::Deserializable<decltype(obj.size)>::deserialize(deserializer);
6975 deserializer.decrease_container_depth();
6976 return obj;
6977}
6978
6979namespace Acir {
6980
6981inline bool operator==(const IntegerBitSize& lhs, const IntegerBitSize& rhs)
6982{
6983 if (!(lhs.value == rhs.value)) {
6984 return false;
6985 }
6986 return true;
6987}
6988
6989} // end of namespace Acir
6990
6991template <>
6992template <typename Serializer>
6994{
6995 serializer.increase_container_depth();
6996 serde::Serializable<decltype(obj.value)>::serialize(obj.value, serializer);
6997 serializer.decrease_container_depth();
6998}
6999
7000template <>
7001template <typename Deserializer>
7003{
7004 deserializer.increase_container_depth();
7006 obj.value = serde::Deserializable<decltype(obj.value)>::deserialize(deserializer);
7007 deserializer.decrease_container_depth();
7008 return obj;
7009}
7010
7011namespace Acir {
7012
7013inline bool operator==(const IntegerBitSize::U1& lhs, const IntegerBitSize::U1& rhs)
7014{
7015 return true;
7016}
7017
7018} // end of namespace Acir
7019
7020template <>
7021template <typename Serializer>
7025
7026template <>
7027template <typename Deserializer>
7033
7034namespace Acir {
7035
7036inline bool operator==(const IntegerBitSize::U8& lhs, const IntegerBitSize::U8& rhs)
7037{
7038 return true;
7039}
7040
7041} // end of namespace Acir
7042
7043template <>
7044template <typename Serializer>
7048
7049template <>
7050template <typename Deserializer>
7056
7057namespace Acir {
7058
7059inline bool operator==(const IntegerBitSize::U16& lhs, const IntegerBitSize::U16& rhs)
7060{
7061 return true;
7062}
7063
7064} // end of namespace Acir
7065
7066template <>
7067template <typename Serializer>
7071
7072template <>
7073template <typename Deserializer>
7079
7080namespace Acir {
7081
7082inline bool operator==(const IntegerBitSize::U32& lhs, const IntegerBitSize::U32& rhs)
7083{
7084 return true;
7085}
7086
7087} // end of namespace Acir
7088
7089template <>
7090template <typename Serializer>
7094
7095template <>
7096template <typename Deserializer>
7102
7103namespace Acir {
7104
7105inline bool operator==(const IntegerBitSize::U64& lhs, const IntegerBitSize::U64& rhs)
7106{
7107 return true;
7108}
7109
7110} // end of namespace Acir
7111
7112template <>
7113template <typename Serializer>
7117
7118template <>
7119template <typename Deserializer>
7125
7126namespace Acir {
7127
7128inline bool operator==(const IntegerBitSize::U128& lhs, const IntegerBitSize::U128& rhs)
7129{
7130 return true;
7131}
7132
7133} // end of namespace Acir
7134
7135template <>
7136template <typename Serializer>
7140
7141template <>
7142template <typename Deserializer>
7148
7149namespace Acir {
7150
7151inline bool operator==(const MemOp& lhs, const MemOp& rhs)
7152{
7153 if (!(lhs.operation == rhs.operation)) {
7154 return false;
7155 }
7156 if (!(lhs.index == rhs.index)) {
7157 return false;
7158 }
7159 if (!(lhs.value == rhs.value)) {
7160 return false;
7161 }
7162 return true;
7163}
7164
7165} // end of namespace Acir
7166
7167template <>
7168template <typename Serializer>
7169void serde::Serializable<Acir::MemOp>::serialize(const Acir::MemOp& obj, Serializer& serializer)
7170{
7171 serializer.increase_container_depth();
7172 serde::Serializable<decltype(obj.operation)>::serialize(obj.operation, serializer);
7173 serde::Serializable<decltype(obj.index)>::serialize(obj.index, serializer);
7174 serde::Serializable<decltype(obj.value)>::serialize(obj.value, serializer);
7175 serializer.decrease_container_depth();
7176}
7177
7178template <>
7179template <typename Deserializer>
7181{
7182 deserializer.increase_container_depth();
7183 Acir::MemOp obj;
7184 obj.operation = serde::Deserializable<decltype(obj.operation)>::deserialize(deserializer);
7185 obj.index = serde::Deserializable<decltype(obj.index)>::deserialize(deserializer);
7186 obj.value = serde::Deserializable<decltype(obj.value)>::deserialize(deserializer);
7187 deserializer.decrease_container_depth();
7188 return obj;
7189}
7190
7191namespace Acir {
7192
7193inline bool operator==(const MemoryAddress& lhs, const MemoryAddress& rhs)
7194{
7195 if (!(lhs.value == rhs.value)) {
7196 return false;
7197 }
7198 return true;
7199}
7200
7201} // end of namespace Acir
7202
7203template <>
7204template <typename Serializer>
7206{
7207 serializer.increase_container_depth();
7208 serde::Serializable<decltype(obj.value)>::serialize(obj.value, serializer);
7209 serializer.decrease_container_depth();
7210}
7211
7212template <>
7213template <typename Deserializer>
7215{
7216 deserializer.increase_container_depth();
7218 obj.value = serde::Deserializable<decltype(obj.value)>::deserialize(deserializer);
7219 deserializer.decrease_container_depth();
7220 return obj;
7221}
7222
7223namespace Acir {
7224
7225inline bool operator==(const MemoryAddress::Direct& lhs, const MemoryAddress::Direct& rhs)
7226{
7227 if (!(lhs.value == rhs.value)) {
7228 return false;
7229 }
7230 return true;
7231}
7232
7233} // end of namespace Acir
7234
7235template <>
7236template <typename Serializer>
7238 Serializer& serializer)
7239{
7240 serde::Serializable<decltype(obj.value)>::serialize(obj.value, serializer);
7241}
7242
7243template <>
7244template <typename Deserializer>
7246{
7248 obj.value = serde::Deserializable<decltype(obj.value)>::deserialize(deserializer);
7249 return obj;
7250}
7251
7252namespace Acir {
7253
7255{
7256 if (!(lhs.value == rhs.value)) {
7257 return false;
7258 }
7259 return true;
7260}
7261
7262} // end of namespace Acir
7263
7264template <>
7265template <typename Serializer>
7267 Serializer& serializer)
7268{
7269 serde::Serializable<decltype(obj.value)>::serialize(obj.value, serializer);
7270}
7271
7272template <>
7273template <typename Deserializer>
7275 Deserializer& deserializer)
7276{
7278 obj.value = serde::Deserializable<decltype(obj.value)>::deserialize(deserializer);
7279 return obj;
7280}
7281
7282namespace Acir {
7283
7284inline bool operator==(const Opcode& lhs, const Opcode& rhs)
7285{
7286 if (!(lhs.value == rhs.value)) {
7287 return false;
7288 }
7289 return true;
7290}
7291
7292} // end of namespace Acir
7293
7294template <>
7295template <typename Serializer>
7296void serde::Serializable<Acir::Opcode>::serialize(const Acir::Opcode& obj, Serializer& serializer)
7297{
7298 serializer.increase_container_depth();
7299 serde::Serializable<decltype(obj.value)>::serialize(obj.value, serializer);
7300 serializer.decrease_container_depth();
7301}
7302
7303template <>
7304template <typename Deserializer>
7306{
7307 deserializer.increase_container_depth();
7308 Acir::Opcode obj;
7309 obj.value = serde::Deserializable<decltype(obj.value)>::deserialize(deserializer);
7310 deserializer.decrease_container_depth();
7311 return obj;
7312}
7313
7314namespace Acir {
7315
7316inline bool operator==(const Opcode::AssertZero& lhs, const Opcode::AssertZero& rhs)
7317{
7318 if (!(lhs.value == rhs.value)) {
7319 return false;
7320 }
7321 return true;
7322}
7323
7324} // end of namespace Acir
7325
7326template <>
7327template <typename Serializer>
7329 Serializer& serializer)
7330{
7331 serde::Serializable<decltype(obj.value)>::serialize(obj.value, serializer);
7332}
7333
7334template <>
7335template <typename Deserializer>
7337{
7339 obj.value = serde::Deserializable<decltype(obj.value)>::deserialize(deserializer);
7340 return obj;
7341}
7342
7343namespace Acir {
7344
7346{
7347 if (!(lhs.value == rhs.value)) {
7348 return false;
7349 }
7350 return true;
7351}
7352
7353} // end of namespace Acir
7354
7355template <>
7356template <typename Serializer>
7358 Serializer& serializer)
7359{
7360 serde::Serializable<decltype(obj.value)>::serialize(obj.value, serializer);
7361}
7362
7363template <>
7364template <typename Deserializer>
7366 Deserializer& deserializer)
7367{
7369 obj.value = serde::Deserializable<decltype(obj.value)>::deserialize(deserializer);
7370 return obj;
7371}
7372
7373namespace Acir {
7374
7375inline bool operator==(const Opcode::MemoryOp& lhs, const Opcode::MemoryOp& rhs)
7376{
7377 if (!(lhs.block_id == rhs.block_id)) {
7378 return false;
7379 }
7380 if (!(lhs.op == rhs.op)) {
7381 return false;
7382 }
7383 return true;
7384}
7385
7386} // end of namespace Acir
7387
7388template <>
7389template <typename Serializer>
7391{
7392 serde::Serializable<decltype(obj.block_id)>::serialize(obj.block_id, serializer);
7393 serde::Serializable<decltype(obj.op)>::serialize(obj.op, serializer);
7394}
7395
7396template <>
7397template <typename Deserializer>
7399{
7401 obj.block_id = serde::Deserializable<decltype(obj.block_id)>::deserialize(deserializer);
7402 obj.op = serde::Deserializable<decltype(obj.op)>::deserialize(deserializer);
7403 return obj;
7404}
7405
7406namespace Acir {
7407
7408inline bool operator==(const Opcode::MemoryInit& lhs, const Opcode::MemoryInit& rhs)
7409{
7410 if (!(lhs.block_id == rhs.block_id)) {
7411 return false;
7412 }
7413 if (!(lhs.init == rhs.init)) {
7414 return false;
7415 }
7416 if (!(lhs.block_type == rhs.block_type)) {
7417 return false;
7418 }
7419 return true;
7420}
7421
7422} // end of namespace Acir
7423
7424template <>
7425template <typename Serializer>
7427 Serializer& serializer)
7428{
7429 serde::Serializable<decltype(obj.block_id)>::serialize(obj.block_id, serializer);
7430 serde::Serializable<decltype(obj.init)>::serialize(obj.init, serializer);
7431 serde::Serializable<decltype(obj.block_type)>::serialize(obj.block_type, serializer);
7432}
7433
7434template <>
7435template <typename Deserializer>
7437{
7439 obj.block_id = serde::Deserializable<decltype(obj.block_id)>::deserialize(deserializer);
7440 obj.init = serde::Deserializable<decltype(obj.init)>::deserialize(deserializer);
7441 obj.block_type = serde::Deserializable<decltype(obj.block_type)>::deserialize(deserializer);
7442 return obj;
7443}
7444
7445namespace Acir {
7446
7447inline bool operator==(const Opcode::BrilligCall& lhs, const Opcode::BrilligCall& rhs)
7448{
7449 if (!(lhs.id == rhs.id)) {
7450 return false;
7451 }
7452 if (!(lhs.inputs == rhs.inputs)) {
7453 return false;
7454 }
7455 if (!(lhs.outputs == rhs.outputs)) {
7456 return false;
7457 }
7458 if (!(lhs.predicate == rhs.predicate)) {
7459 return false;
7460 }
7461 return true;
7462}
7463
7464} // end of namespace Acir
7465
7466template <>
7467template <typename Serializer>
7469 Serializer& serializer)
7470{
7471 serde::Serializable<decltype(obj.id)>::serialize(obj.id, serializer);
7472 serde::Serializable<decltype(obj.inputs)>::serialize(obj.inputs, serializer);
7473 serde::Serializable<decltype(obj.outputs)>::serialize(obj.outputs, serializer);
7474 serde::Serializable<decltype(obj.predicate)>::serialize(obj.predicate, serializer);
7475}
7476
7477template <>
7478template <typename Deserializer>
7480{
7482 obj.id = serde::Deserializable<decltype(obj.id)>::deserialize(deserializer);
7483 obj.inputs = serde::Deserializable<decltype(obj.inputs)>::deserialize(deserializer);
7484 obj.outputs = serde::Deserializable<decltype(obj.outputs)>::deserialize(deserializer);
7485 obj.predicate = serde::Deserializable<decltype(obj.predicate)>::deserialize(deserializer);
7486 return obj;
7487}
7488
7489namespace Acir {
7490
7491inline bool operator==(const Opcode::Call& lhs, const Opcode::Call& rhs)
7492{
7493 if (!(lhs.id == rhs.id)) {
7494 return false;
7495 }
7496 if (!(lhs.inputs == rhs.inputs)) {
7497 return false;
7498 }
7499 if (!(lhs.outputs == rhs.outputs)) {
7500 return false;
7501 }
7502 if (!(lhs.predicate == rhs.predicate)) {
7503 return false;
7504 }
7505 return true;
7506}
7507
7508} // end of namespace Acir
7509
7510template <>
7511template <typename Serializer>
7513{
7514 serde::Serializable<decltype(obj.id)>::serialize(obj.id, serializer);
7515 serde::Serializable<decltype(obj.inputs)>::serialize(obj.inputs, serializer);
7516 serde::Serializable<decltype(obj.outputs)>::serialize(obj.outputs, serializer);
7517 serde::Serializable<decltype(obj.predicate)>::serialize(obj.predicate, serializer);
7518}
7519
7520template <>
7521template <typename Deserializer>
7523{
7525 obj.id = serde::Deserializable<decltype(obj.id)>::deserialize(deserializer);
7526 obj.inputs = serde::Deserializable<decltype(obj.inputs)>::deserialize(deserializer);
7527 obj.outputs = serde::Deserializable<decltype(obj.outputs)>::deserialize(deserializer);
7528 obj.predicate = serde::Deserializable<decltype(obj.predicate)>::deserialize(deserializer);
7529 return obj;
7530}
7531
7532namespace Acir {
7533
7534inline bool operator==(const OpcodeLocation& lhs, const OpcodeLocation& rhs)
7535{
7536 if (!(lhs.value == rhs.value)) {
7537 return false;
7538 }
7539 return true;
7540}
7541
7542} // end of namespace Acir
7543
7544template <>
7545template <typename Serializer>
7547{
7548 serializer.increase_container_depth();
7549 serde::Serializable<decltype(obj.value)>::serialize(obj.value, serializer);
7550 serializer.decrease_container_depth();
7551}
7552
7553template <>
7554template <typename Deserializer>
7556{
7557 deserializer.increase_container_depth();
7559 obj.value = serde::Deserializable<decltype(obj.value)>::deserialize(deserializer);
7560 deserializer.decrease_container_depth();
7561 return obj;
7562}
7563
7564namespace Acir {
7565
7566inline bool operator==(const OpcodeLocation::Acir& lhs, const OpcodeLocation::Acir& rhs)
7567{
7568 if (!(lhs.value == rhs.value)) {
7569 return false;
7570 }
7571 return true;
7572}
7573
7574} // end of namespace Acir
7575
7576template <>
7577template <typename Serializer>
7579 Serializer& serializer)
7580{
7581 serde::Serializable<decltype(obj.value)>::serialize(obj.value, serializer);
7582}
7583
7584template <>
7585template <typename Deserializer>
7587{
7589 obj.value = serde::Deserializable<decltype(obj.value)>::deserialize(deserializer);
7590 return obj;
7591}
7592
7593namespace Acir {
7594
7596{
7597 if (!(lhs.acir_index == rhs.acir_index)) {
7598 return false;
7599 }
7600 if (!(lhs.brillig_index == rhs.brillig_index)) {
7601 return false;
7602 }
7603 return true;
7604}
7605
7606} // end of namespace Acir
7607
7608template <>
7609template <typename Serializer>
7611 Serializer& serializer)
7612{
7613 serde::Serializable<decltype(obj.acir_index)>::serialize(obj.acir_index, serializer);
7614 serde::Serializable<decltype(obj.brillig_index)>::serialize(obj.brillig_index, serializer);
7615}
7616
7617template <>
7618template <typename Deserializer>
7620 Deserializer& deserializer)
7621{
7623 obj.acir_index = serde::Deserializable<decltype(obj.acir_index)>::deserialize(deserializer);
7624 obj.brillig_index = serde::Deserializable<decltype(obj.brillig_index)>::deserialize(deserializer);
7625 return obj;
7626}
7627
7628namespace Acir {
7629
7630inline bool operator==(const Program& lhs, const Program& rhs)
7631{
7632 if (!(lhs.functions == rhs.functions)) {
7633 return false;
7634 }
7636 return false;
7637 }
7638 return true;
7639}
7640
7641} // end of namespace Acir
7642
7643template <>
7644template <typename Serializer>
7645void serde::Serializable<Acir::Program>::serialize(const Acir::Program& obj, Serializer& serializer)
7646{
7647 serializer.increase_container_depth();
7648 serde::Serializable<decltype(obj.functions)>::serialize(obj.functions, serializer);
7649 serde::Serializable<decltype(obj.unconstrained_functions)>::serialize(obj.unconstrained_functions, serializer);
7650 serializer.decrease_container_depth();
7651}
7652
7653template <>
7654template <typename Deserializer>
7656{
7657 deserializer.increase_container_depth();
7658 Acir::Program obj;
7659 obj.functions = serde::Deserializable<decltype(obj.functions)>::deserialize(deserializer);
7661 serde::Deserializable<decltype(obj.unconstrained_functions)>::deserialize(deserializer);
7662 deserializer.decrease_container_depth();
7663 return obj;
7664}
7665
7666namespace Acir {
7667
7668inline bool operator==(const ProgramWithoutBrillig& lhs, const ProgramWithoutBrillig& rhs)
7669{
7670 if (!(lhs.functions == rhs.functions)) {
7671 return false;
7672 }
7674 return false;
7675 }
7676 return true;
7677}
7678
7679} // end of namespace Acir
7680
7681template <>
7682template <typename Serializer>
7684 Serializer& serializer)
7685{
7686 serializer.increase_container_depth();
7687 serde::Serializable<decltype(obj.functions)>::serialize(obj.functions, serializer);
7688 serde::Serializable<decltype(obj.unconstrained_functions)>::serialize(obj.unconstrained_functions, serializer);
7689 serializer.decrease_container_depth();
7690}
7691
7692template <>
7693template <typename Deserializer>
7695{
7696 deserializer.increase_container_depth();
7698 obj.functions = serde::Deserializable<decltype(obj.functions)>::deserialize(deserializer);
7700 serde::Deserializable<decltype(obj.unconstrained_functions)>::deserialize(deserializer);
7701 deserializer.decrease_container_depth();
7702 return obj;
7703}
7704
7705namespace Acir {
7706
7707inline bool operator==(const PublicInputs& lhs, const PublicInputs& rhs)
7708{
7709 if (!(lhs.value == rhs.value)) {
7710 return false;
7711 }
7712 return true;
7713}
7714
7715} // end of namespace Acir
7716
7717template <>
7718template <typename Serializer>
7720{
7721 serializer.increase_container_depth();
7722 serde::Serializable<decltype(obj.value)>::serialize(obj.value, serializer);
7723 serializer.decrease_container_depth();
7724}
7725
7726template <>
7727template <typename Deserializer>
7729{
7730 deserializer.increase_container_depth();
7732 obj.value = serde::Deserializable<decltype(obj.value)>::deserialize(deserializer);
7733 deserializer.decrease_container_depth();
7734 return obj;
7735}
7736
7737namespace Acir {
7738
7739inline bool operator==(const SemanticLength& lhs, const SemanticLength& rhs)
7740{
7741 if (!(lhs.value == rhs.value)) {
7742 return false;
7743 }
7744 return true;
7745}
7746
7747} // end of namespace Acir
7748
7749template <>
7750template <typename Serializer>
7752{
7753 serializer.increase_container_depth();
7754 serde::Serializable<decltype(obj.value)>::serialize(obj.value, serializer);
7755 serializer.decrease_container_depth();
7756}
7757
7758template <>
7759template <typename Deserializer>
7761{
7762 deserializer.increase_container_depth();
7764 obj.value = serde::Deserializable<decltype(obj.value)>::deserialize(deserializer);
7765 deserializer.decrease_container_depth();
7766 return obj;
7767}
7768
7769namespace Acir {
7770
7771inline bool operator==(const SemiFlattenedLength& lhs, const SemiFlattenedLength& rhs)
7772{
7773 if (!(lhs.value == rhs.value)) {
7774 return false;
7775 }
7776 return true;
7777}
7778
7779} // end of namespace Acir
7780
7781template <>
7782template <typename Serializer>
7784 Serializer& serializer)
7785{
7786 serializer.increase_container_depth();
7787 serde::Serializable<decltype(obj.value)>::serialize(obj.value, serializer);
7788 serializer.decrease_container_depth();
7789}
7790
7791template <>
7792template <typename Deserializer>
7794{
7795 deserializer.increase_container_depth();
7797 obj.value = serde::Deserializable<decltype(obj.value)>::deserialize(deserializer);
7798 deserializer.decrease_container_depth();
7799 return obj;
7800}
7801
7802namespace Acir {
7803
7804inline bool operator==(const ValueOrArray& lhs, const ValueOrArray& rhs)
7805{
7806 if (!(lhs.value == rhs.value)) {
7807 return false;
7808 }
7809 return true;
7810}
7811
7812} // end of namespace Acir
7813
7814template <>
7815template <typename Serializer>
7817{
7818 serializer.increase_container_depth();
7819 serde::Serializable<decltype(obj.value)>::serialize(obj.value, serializer);
7820 serializer.decrease_container_depth();
7821}
7822
7823template <>
7824template <typename Deserializer>
7826{
7827 deserializer.increase_container_depth();
7829 obj.value = serde::Deserializable<decltype(obj.value)>::deserialize(deserializer);
7830 deserializer.decrease_container_depth();
7831 return obj;
7832}
7833
7834namespace Acir {
7835
7837{
7838 if (!(lhs.value == rhs.value)) {
7839 return false;
7840 }
7841 return true;
7842}
7843
7844} // end of namespace Acir
7845
7846template <>
7847template <typename Serializer>
7849 Serializer& serializer)
7850{
7851 serde::Serializable<decltype(obj.value)>::serialize(obj.value, serializer);
7852}
7853
7854template <>
7855template <typename Deserializer>
7857 Deserializer& deserializer)
7858{
7860 obj.value = serde::Deserializable<decltype(obj.value)>::deserialize(deserializer);
7861 return obj;
7862}
7863
7864namespace Acir {
7865
7867{
7868 if (!(lhs.value == rhs.value)) {
7869 return false;
7870 }
7871 return true;
7872}
7873
7874} // end of namespace Acir
7875
7876template <>
7877template <typename Serializer>
7879 Serializer& serializer)
7880{
7881 serde::Serializable<decltype(obj.value)>::serialize(obj.value, serializer);
7882}
7883
7884template <>
7885template <typename Deserializer>
7887 Deserializer& deserializer)
7888{
7890 obj.value = serde::Deserializable<decltype(obj.value)>::deserialize(deserializer);
7891 return obj;
7892}
7893
7894namespace Acir {
7895
7897{
7898 if (!(lhs.value == rhs.value)) {
7899 return false;
7900 }
7901 return true;
7902}
7903
7904} // end of namespace Acir
7905
7906template <>
7907template <typename Serializer>
7909 Serializer& serializer)
7910{
7911 serde::Serializable<decltype(obj.value)>::serialize(obj.value, serializer);
7912}
7913
7914template <>
7915template <typename Deserializer>
7917 Deserializer& deserializer)
7918{
7920 obj.value = serde::Deserializable<decltype(obj.value)>::deserialize(deserializer);
7921 return obj;
7922}
7923
7924namespace Acir {
7925
7926inline bool operator==(const Witness& lhs, const Witness& rhs)
7927{
7928 if (!(lhs.value == rhs.value)) {
7929 return false;
7930 }
7931 return true;
7932}
7933
7934} // end of namespace Acir
7935
7936template <>
7937template <typename Serializer>
7938void serde::Serializable<Acir::Witness>::serialize(const Acir::Witness& obj, Serializer& serializer)
7939{
7940 serializer.increase_container_depth();
7941 serde::Serializable<decltype(obj.value)>::serialize(obj.value, serializer);
7942 serializer.decrease_container_depth();
7943}
7944
7945template <>
7946template <typename Deserializer>
7948{
7949 deserializer.increase_container_depth();
7950 Acir::Witness obj;
7951 obj.value = serde::Deserializable<decltype(obj.value)>::deserialize(deserializer);
7952 deserializer.decrease_container_depth();
7953 return obj;
7954}
Serves as a key-value node store for merkle trees. Caches all changes in memory before persisting the...
Definition acir.hpp:6
bool operator==(const AssertionPayload &lhs, const AssertionPayload &rhs)
Definition acir.hpp:3604
constexpr decltype(auto) get(::tuplet::tuple< T... > &&t) noexcept
Definition tuple.hpp:13
std::string to_string(bb::avm2::ValueTag tag)
uint64_t error_selector
Definition acir.hpp:3364
std::vector< Acir::ExpressionOrMemory > payload
Definition acir.hpp:3365
friend bool operator==(const AssertionPayload &, const AssertionPayload &)
Definition acir.hpp:3604
void msgpack_unpack(msgpack::object const &o)
Definition acir.hpp:3369
void msgpack_unpack(msgpack::object const &o)
Definition acir.hpp:74
friend bool operator==(const Add &, const Add &)
Definition acir.hpp:3673
void msgpack_unpack(msgpack::object const &o)
Definition acir.hpp:92
friend bool operator==(const Div &, const Div &)
Definition acir.hpp:3742
void msgpack_unpack(msgpack::object const &o)
Definition acir.hpp:104
friend bool operator==(const Equals &, const Equals &)
Definition acir.hpp:3789
friend bool operator==(const IntegerDiv &, const IntegerDiv &)
Definition acir.hpp:3765
void msgpack_unpack(msgpack::object const &o)
Definition acir.hpp:98
friend bool operator==(const LessThanEquals &, const LessThanEquals &)
Definition acir.hpp:3836
void msgpack_unpack(msgpack::object const &o)
Definition acir.hpp:116
void msgpack_unpack(msgpack::object const &o)
Definition acir.hpp:110
friend bool operator==(const LessThan &, const LessThan &)
Definition acir.hpp:3812
void msgpack_unpack(msgpack::object const &o)
Definition acir.hpp:86
friend bool operator==(const Mul &, const Mul &)
Definition acir.hpp:3719
void msgpack_unpack(msgpack::object const &o)
Definition acir.hpp:80
friend bool operator==(const Sub &, const Sub &)
Definition acir.hpp:3696
std::variant< Add, Sub, Mul, Div, IntegerDiv, Equals, LessThan, LessThanEquals > value
Definition acir.hpp:119
void msgpack_unpack(msgpack::object const &o)
Definition acir.hpp:123
friend bool operator==(const BinaryFieldOp &, const BinaryFieldOp &)
Definition acir.hpp:3641
void msgpack_unpack(msgpack::object const &o)
Definition acir.hpp:180
friend bool operator==(const Add &, const Add &)
Definition acir.hpp:3892
friend bool operator==(const And &, const And &)
Definition acir.hpp:4050
void msgpack_unpack(msgpack::object const &o)
Definition acir.hpp:222
void msgpack_unpack(msgpack::object const &o)
Definition acir.hpp:198
friend bool operator==(const Div &, const Div &)
Definition acir.hpp:3958
void msgpack_unpack(msgpack::object const &o)
Definition acir.hpp:204
friend bool operator==(const Equals &, const Equals &)
Definition acir.hpp:3980
friend bool operator==(const LessThanEquals &, const LessThanEquals &)
Definition acir.hpp:4026
void msgpack_unpack(msgpack::object const &o)
Definition acir.hpp:216
void msgpack_unpack(msgpack::object const &o)
Definition acir.hpp:210
friend bool operator==(const LessThan &, const LessThan &)
Definition acir.hpp:4003
friend bool operator==(const Mul &, const Mul &)
Definition acir.hpp:3936
void msgpack_unpack(msgpack::object const &o)
Definition acir.hpp:192
void msgpack_unpack(msgpack::object const &o)
Definition acir.hpp:228
friend bool operator==(const Or &, const Or &)
Definition acir.hpp:4072
friend bool operator==(const Shl &, const Shl &)
Definition acir.hpp:4116
void msgpack_unpack(msgpack::object const &o)
Definition acir.hpp:240
void msgpack_unpack(msgpack::object const &o)
Definition acir.hpp:246
friend bool operator==(const Shr &, const Shr &)
Definition acir.hpp:4138
void msgpack_unpack(msgpack::object const &o)
Definition acir.hpp:186
friend bool operator==(const Sub &, const Sub &)
Definition acir.hpp:3914
friend bool operator==(const Xor &, const Xor &)
Definition acir.hpp:4094
void msgpack_unpack(msgpack::object const &o)
Definition acir.hpp:234
void msgpack_unpack(msgpack::object const &o)
Definition acir.hpp:253
std::variant< Add, Sub, Mul, Div, Equals, LessThan, LessThanEquals, And, Or, Xor, Shl, Shr > value
Definition acir.hpp:249
friend bool operator==(const BinaryIntOp &, const BinaryIntOp &)
Definition acir.hpp:3860
friend bool operator==(const Field &, const Field &)
Definition acir.hpp:4192
void msgpack_unpack(msgpack::object const &o)
Definition acir.hpp:410
Acir::IntegerBitSize value
Definition acir.hpp:414
friend bool operator==(const Integer &, const Integer &)
Definition acir.hpp:4214
void msgpack_unpack(msgpack::object const &o)
Definition acir.hpp:418
std::variant< Field, Integer > value
Definition acir.hpp:429
friend bool operator==(const BitSize &, const BitSize &)
Definition acir.hpp:4160
void msgpack_unpack(msgpack::object const &o)
Definition acir.hpp:433
std::shared_ptr< std::array< Acir::FunctionInput, 16 > > key
Definition acir.hpp:2126
std::vector< Acir::Witness > outputs
Definition acir.hpp:2127
std::vector< Acir::FunctionInput > inputs
Definition acir.hpp:2124
friend bool operator==(const AES128Encrypt &, const AES128Encrypt &)
Definition acir.hpp:4274
void msgpack_unpack(msgpack::object const &o)
Definition acir.hpp:2131
std::shared_ptr< std::array< Acir::FunctionInput, 16 > > iv
Definition acir.hpp:2125
friend bool operator==(const AND &, const AND &)
Definition acir.hpp:4319
Acir::FunctionInput lhs
Definition acir.hpp:2153
void msgpack_unpack(msgpack::object const &o)
Definition acir.hpp:2160
Acir::FunctionInput rhs
Definition acir.hpp:2154
std::shared_ptr< std::array< Acir::Witness, 32 > > outputs
Definition acir.hpp:2235
friend bool operator==(const Blake2s &, const Blake2s &)
Definition acir.hpp:4442
std::vector< Acir::FunctionInput > inputs
Definition acir.hpp:2234
void msgpack_unpack(msgpack::object const &o)
Definition acir.hpp:2239
void msgpack_unpack(msgpack::object const &o)
Definition acir.hpp:2262
std::shared_ptr< std::array< Acir::Witness, 32 > > outputs
Definition acir.hpp:2258
std::vector< Acir::FunctionInput > inputs
Definition acir.hpp:2257
friend bool operator==(const Blake3 &, const Blake3 &)
Definition acir.hpp:4477
std::shared_ptr< std::array< Acir::FunctionInput, 32 > > public_key_x
Definition acir.hpp:2280
std::shared_ptr< std::array< Acir::FunctionInput, 32 > > hashed_message
Definition acir.hpp:2283
friend bool operator==(const EcdsaSecp256k1 &, const EcdsaSecp256k1 &)
Definition acir.hpp:4512
std::shared_ptr< std::array< Acir::FunctionInput, 32 > > public_key_y
Definition acir.hpp:2281
void msgpack_unpack(msgpack::object const &o)
Definition acir.hpp:2289
std::shared_ptr< std::array< Acir::FunctionInput, 64 > > signature
Definition acir.hpp:2282
std::shared_ptr< std::array< Acir::FunctionInput, 32 > > public_key_x
Definition acir.hpp:2315
friend bool operator==(const EcdsaSecp256r1 &, const EcdsaSecp256r1 &)
Definition acir.hpp:4567
void msgpack_unpack(msgpack::object const &o)
Definition acir.hpp:2324
std::shared_ptr< std::array< Acir::FunctionInput, 32 > > hashed_message
Definition acir.hpp:2318
std::shared_ptr< std::array< Acir::FunctionInput, 32 > > public_key_y
Definition acir.hpp:2316
std::shared_ptr< std::array< Acir::FunctionInput, 64 > > signature
Definition acir.hpp:2317
std::shared_ptr< std::array< Acir::Witness, 3 > > outputs
Definition acir.hpp:2382
friend bool operator==(const EmbeddedCurveAdd &, const EmbeddedCurveAdd &)
Definition acir.hpp:4667
std::shared_ptr< std::array< Acir::FunctionInput, 3 > > input2
Definition acir.hpp:2380
void msgpack_unpack(msgpack::object const &o)
Definition acir.hpp:2386
std::shared_ptr< std::array< Acir::FunctionInput, 3 > > input1
Definition acir.hpp:2379
std::shared_ptr< std::array< Acir::FunctionInput, 25 > > inputs
Definition acir.hpp:2408
friend bool operator==(const Keccakf1600 &, const Keccakf1600 &)
Definition acir.hpp:4712
void msgpack_unpack(msgpack::object const &o)
Definition acir.hpp:2413
std::shared_ptr< std::array< Acir::Witness, 25 > > outputs
Definition acir.hpp:2409
std::vector< Acir::FunctionInput > scalars
Definition acir.hpp:2351
std::vector< Acir::FunctionInput > points
Definition acir.hpp:2350
std::shared_ptr< std::array< Acir::Witness, 3 > > outputs
Definition acir.hpp:2353
friend bool operator==(const MultiScalarMul &, const MultiScalarMul &)
Definition acir.hpp:4622
void msgpack_unpack(msgpack::object const &o)
Definition acir.hpp:2357
std::vector< Acir::Witness > outputs
Definition acir.hpp:2467
std::vector< Acir::FunctionInput > inputs
Definition acir.hpp:2466
void msgpack_unpack(msgpack::object const &o)
Definition acir.hpp:2471
friend bool operator==(const Poseidon2Permutation &, const Poseidon2Permutation &)
Definition acir.hpp:4803
void msgpack_unpack(msgpack::object const &o)
Definition acir.hpp:2216
friend bool operator==(const RANGE &, const RANGE &)
Definition acir.hpp:4407
Acir::FunctionInput input
Definition acir.hpp:2211
std::vector< Acir::FunctionInput > verification_key
Definition acir.hpp:2431
std::vector< Acir::FunctionInput > proof
Definition acir.hpp:2432
std::vector< Acir::FunctionInput > public_inputs
Definition acir.hpp:2433
friend bool operator==(const RecursiveAggregation &, const RecursiveAggregation &)
Definition acir.hpp:4747
void msgpack_unpack(msgpack::object const &o)
Definition acir.hpp:2440
void msgpack_unpack(msgpack::object const &o)
Definition acir.hpp:2495
std::shared_ptr< std::array< Acir::FunctionInput, 8 > > hash_values
Definition acir.hpp:2490
friend bool operator==(const Sha256Compression &, const Sha256Compression &)
Definition acir.hpp:4839
std::shared_ptr< std::array< Acir::FunctionInput, 16 > > inputs
Definition acir.hpp:2489
std::shared_ptr< std::array< Acir::Witness, 8 > > outputs
Definition acir.hpp:2491
void msgpack_unpack(msgpack::object const &o)
Definition acir.hpp:2189
Acir::FunctionInput rhs
Definition acir.hpp:2183
Acir::FunctionInput lhs
Definition acir.hpp:2182
friend bool operator==(const XOR &, const XOR &)
Definition acir.hpp:4363
friend bool operator==(const BlackBoxFuncCall &, const BlackBoxFuncCall &)
Definition acir.hpp:4242
void msgpack_unpack(msgpack::object const &o)
Definition acir.hpp:2532
std::variant< AES128Encrypt, AND, XOR, RANGE, Blake2s, Blake3, EcdsaSecp256k1, EcdsaSecp256r1, MultiScalarMul, EmbeddedCurveAdd, Keccakf1600, RecursiveAggregation, Poseidon2Permutation, Sha256Compression > value
Definition acir.hpp:2528
void msgpack_unpack(msgpack::object const &o)
Definition acir.hpp:609
friend bool operator==(const AES128Encrypt &, const AES128Encrypt &)
Definition acir.hpp:4911
Acir::HeapArray output
Definition acir.hpp:632
Acir::HeapArray message
Definition acir.hpp:631
friend bool operator==(const Blake2s &, const Blake2s &)
Definition acir.hpp:4956
void msgpack_unpack(msgpack::object const &o)
Definition acir.hpp:636
Acir::HeapArray message
Definition acir.hpp:654
Acir::HeapArray output
Definition acir.hpp:655
void msgpack_unpack(msgpack::object const &o)
Definition acir.hpp:659
friend bool operator==(const Blake3 &, const Blake3 &)
Definition acir.hpp:4990
Acir::MemoryAddress result
Definition acir.hpp:704
void msgpack_unpack(msgpack::object const &o)
Definition acir.hpp:708
Acir::HeapArray public_key_y
Definition acir.hpp:702
friend bool operator==(const EcdsaSecp256k1 &, const EcdsaSecp256k1 &)
Definition acir.hpp:5059
Acir::HeapArray public_key_x
Definition acir.hpp:701
Acir::MemoryAddress result
Definition acir.hpp:736
void msgpack_unpack(msgpack::object const &o)
Definition acir.hpp:740
friend bool operator==(const EcdsaSecp256r1 &, const EcdsaSecp256r1 &)
Definition acir.hpp:5109
Acir::HeapArray public_key_y
Definition acir.hpp:734
Acir::HeapArray public_key_x
Definition acir.hpp:733
Acir::MemoryAddress input1_x
Definition acir.hpp:790
friend bool operator==(const EmbeddedCurveAdd &, const EmbeddedCurveAdd &)
Definition acir.hpp:5199
Acir::MemoryAddress input2_infinite
Definition acir.hpp:795
Acir::MemoryAddress input1_y
Definition acir.hpp:791
Acir::MemoryAddress input1_infinite
Definition acir.hpp:792
Acir::MemoryAddress input2_x
Definition acir.hpp:793
void msgpack_unpack(msgpack::object const &o)
Definition acir.hpp:800
Acir::MemoryAddress input2_y
Definition acir.hpp:794
Acir::HeapArray input
Definition acir.hpp:677
friend bool operator==(const Keccakf1600 &, const Keccakf1600 &)
Definition acir.hpp:5024
Acir::HeapArray output
Definition acir.hpp:678
void msgpack_unpack(msgpack::object const &o)
Definition acir.hpp:682
friend bool operator==(const MultiScalarMul &, const MultiScalarMul &)
Definition acir.hpp:5159
void msgpack_unpack(msgpack::object const &o)
Definition acir.hpp:770
void msgpack_unpack(msgpack::object const &o)
Definition acir.hpp:833
friend bool operator==(const Poseidon2Permutation &, const Poseidon2Permutation &)
Definition acir.hpp:5259
friend bool operator==(const Sha256Compression &, const Sha256Compression &)
Definition acir.hpp:5294
void msgpack_unpack(msgpack::object const &o)
Definition acir.hpp:857
friend bool operator==(const ToRadix &, const ToRadix &)
Definition acir.hpp:5334
Acir::MemoryAddress output_pointer
Definition acir.hpp:879
Acir::MemoryAddress radix
Definition acir.hpp:878
Acir::MemoryAddress output_bits
Definition acir.hpp:881
Acir::MemoryAddress input
Definition acir.hpp:877
Acir::MemoryAddress num_limbs
Definition acir.hpp:880
void msgpack_unpack(msgpack::object const &o)
Definition acir.hpp:885
void msgpack_unpack(msgpack::object const &o)
Definition acir.hpp:923
friend bool operator==(const BlackBoxOp &, const BlackBoxOp &)
Definition acir.hpp:4879
std::variant< AES128Encrypt, Blake2s, Blake3, Keccakf1600, EcdsaSecp256k1, EcdsaSecp256r1, MultiScalarMul, EmbeddedCurveAdd, Poseidon2Permutation, Sha256Compression, ToRadix > value
Definition acir.hpp:919
friend bool operator==(const BlockId &, const BlockId &)
Definition acir.hpp:5383
void msgpack_unpack(msgpack::object const &o)
Definition acir.hpp:2705
uint32_t value
Definition acir.hpp:2701
friend bool operator==(const CallData &, const CallData &)
Definition acir.hpp:5469
void msgpack_unpack(msgpack::object const &o)
Definition acir.hpp:2729
void msgpack_unpack(msgpack::object const &o)
Definition acir.hpp:2721
friend bool operator==(const Memory &, const Memory &)
Definition acir.hpp:5447
void msgpack_unpack(msgpack::object const &o)
Definition acir.hpp:2743
friend bool operator==(const ReturnData &, const ReturnData &)
Definition acir.hpp:5498
void msgpack_unpack(msgpack::object const &o)
Definition acir.hpp:2750
std::variant< Memory, CallData, ReturnData > value
Definition acir.hpp:2746
friend bool operator==(const BlockType &, const BlockType &)
Definition acir.hpp:5415
friend bool operator==(const BrilligBytecode &, const BrilligBytecode &)
Definition acir.hpp:5521
std::vector< Acir::BrilligOpcode > bytecode
Definition acir.hpp:3535
std::string function_name
Definition acir.hpp:3534
void msgpack_unpack(msgpack::object const &o)
Definition acir.hpp:3539
void msgpack_unpack(msgpack::object const &o)
Definition acir.hpp:2843
std::vector< Acir::Expression > value
Definition acir.hpp:2839
friend bool operator==(const Array &, const Array &)
Definition acir.hpp:5619
void msgpack_unpack(msgpack::object const &o)
Definition acir.hpp:2859
friend bool operator==(const MemoryArray &, const MemoryArray &)
Definition acir.hpp:5648
Acir::Expression value
Definition acir.hpp:2823
friend bool operator==(const Single &, const Single &)
Definition acir.hpp:5590
void msgpack_unpack(msgpack::object const &o)
Definition acir.hpp:2827
void msgpack_unpack(msgpack::object const &o)
Definition acir.hpp:2874
std::variant< Single, Array, MemoryArray > value
Definition acir.hpp:2870
friend bool operator==(const BrilligInputs &, const BrilligInputs &)
Definition acir.hpp:5558
friend bool operator==(const BinaryFieldOp &, const BinaryFieldOp &)
Definition acir.hpp:5710
Acir::MemoryAddress destination
Definition acir.hpp:1340
void msgpack_unpack(msgpack::object const &o)
Definition acir.hpp:1347
void msgpack_unpack(msgpack::object const &o)
Definition acir.hpp:1377
Acir::MemoryAddress destination
Definition acir.hpp:1369
Acir::MemoryAddress rhs
Definition acir.hpp:1373
friend bool operator==(const BinaryIntOp &, const BinaryIntOp &)
Definition acir.hpp:5755
Acir::IntegerBitSize bit_size
Definition acir.hpp:1371
Acir::MemoryAddress lhs
Definition acir.hpp:1372
void msgpack_unpack(msgpack::object const &o)
Definition acir.hpp:1734
Acir::BlackBoxOp value
Definition acir.hpp:1730
friend bool operator==(const BlackBox &, const BlackBox &)
Definition acir.hpp:6315
friend bool operator==(const Call &, const Call &)
Definition acir.hpp:5986
void msgpack_unpack(msgpack::object const &o)
Definition acir.hpp:1526
Acir::MemoryAddress offset_address
Definition acir.hpp:1498
friend bool operator==(const CalldataCopy &, const CalldataCopy &)
Definition acir.hpp:5946
Acir::MemoryAddress destination_address
Definition acir.hpp:1496
Acir::MemoryAddress size_address
Definition acir.hpp:1497
void msgpack_unpack(msgpack::object const &o)
Definition acir.hpp:1502
Acir::MemoryAddress source
Definition acir.hpp:1428
void msgpack_unpack(msgpack::object const &o)
Definition acir.hpp:1433
Acir::MemoryAddress destination
Definition acir.hpp:1427
Acir::BitSize bit_size
Definition acir.hpp:1429
friend bool operator==(const Cast &, const Cast &)
Definition acir.hpp:5844
Acir::MemoryAddress source_b
Definition acir.hpp:1657
friend bool operator==(const ConditionalMov &, const ConditionalMov &)
Definition acir.hpp:6202
Acir::MemoryAddress source_a
Definition acir.hpp:1656
void msgpack_unpack(msgpack::object const &o)
Definition acir.hpp:1662
Acir::MemoryAddress destination
Definition acir.hpp:1655
Acir::MemoryAddress condition
Definition acir.hpp:1658
Acir::BitSize bit_size
Definition acir.hpp:1543
friend bool operator==(const Const &, const Const &)
Definition acir.hpp:6015
std::vector< uint8_t > value
Definition acir.hpp:1544
void msgpack_unpack(msgpack::object const &o)
Definition acir.hpp:1548
Acir::MemoryAddress destination
Definition acir.hpp:1542
std::vector< Acir::HeapValueType > input_value_types
Definition acir.hpp:1604
std::vector< Acir::HeapValueType > destination_value_types
Definition acir.hpp:1602
std::vector< Acir::ValueOrArray > destinations
Definition acir.hpp:1601
friend bool operator==(const ForeignCall &, const ForeignCall &)
Definition acir.hpp:6117
void msgpack_unpack(msgpack::object const &o)
Definition acir.hpp:1608
std::vector< Acir::ValueOrArray > inputs
Definition acir.hpp:1603
std::vector< uint8_t > value
Definition acir.hpp:1570
void msgpack_unpack(msgpack::object const &o)
Definition acir.hpp:1574
friend bool operator==(const IndirectConst &, const IndirectConst &)
Definition acir.hpp:6054
Acir::MemoryAddress destination_pointer
Definition acir.hpp:1568
void msgpack_unpack(msgpack::object const &o)
Definition acir.hpp:1480
friend bool operator==(const Jump &, const Jump &)
Definition acir.hpp:5917
Acir::MemoryAddress condition
Definition acir.hpp:1453
friend bool operator==(const JumpIf &, const JumpIf &)
Definition acir.hpp:5883
void msgpack_unpack(msgpack::object const &o)
Definition acir.hpp:1458
void msgpack_unpack(msgpack::object const &o)
Definition acir.hpp:1689
Acir::MemoryAddress destination
Definition acir.hpp:1684
Acir::MemoryAddress source_pointer
Definition acir.hpp:1685
friend bool operator==(const Load &, const Load &)
Definition acir.hpp:6247
Acir::MemoryAddress destination
Definition acir.hpp:1632
friend bool operator==(const Mov &, const Mov &)
Definition acir.hpp:6168
void msgpack_unpack(msgpack::object const &o)
Definition acir.hpp:1637
Acir::MemoryAddress source
Definition acir.hpp:1633
friend bool operator==(const Not &, const Not &)
Definition acir.hpp:5805
Acir::MemoryAddress source
Definition acir.hpp:1402
Acir::IntegerBitSize bit_size
Definition acir.hpp:1403
void msgpack_unpack(msgpack::object const &o)
Definition acir.hpp:1407
Acir::MemoryAddress destination
Definition acir.hpp:1401
friend bool operator==(const Return &, const Return &)
Definition acir.hpp:6094
void msgpack_unpack(msgpack::object const &o)
Definition acir.hpp:1596
friend bool operator==(const Stop &, const Stop &)
Definition acir.hpp:6374
void msgpack_unpack(msgpack::object const &o)
Definition acir.hpp:1770
Acir::HeapVector return_data
Definition acir.hpp:1766
friend bool operator==(const Store &, const Store &)
Definition acir.hpp:6281
void msgpack_unpack(msgpack::object const &o)
Definition acir.hpp:1712
Acir::MemoryAddress source
Definition acir.hpp:1708
Acir::MemoryAddress destination_pointer
Definition acir.hpp:1707
friend bool operator==(const Trap &, const Trap &)
Definition acir.hpp:6345
void msgpack_unpack(msgpack::object const &o)
Definition acir.hpp:1750
Acir::HeapVector revert_data
Definition acir.hpp:1746
std::variant< BinaryFieldOp, BinaryIntOp, Not, Cast, JumpIf, Jump, CalldataCopy, Call, Const, IndirectConst, Return, ForeignCall, Mov, ConditionalMov, Load, Store, BlackBox, Trap, Stop > value
Definition acir.hpp:1804
friend bool operator==(const BrilligOpcode &, const BrilligOpcode &)
Definition acir.hpp:5678
void msgpack_unpack(msgpack::object const &o)
Definition acir.hpp:1808
std::vector< Acir::Witness > value
Definition acir.hpp:2951
friend bool operator==(const Array &, const Array &)
Definition acir.hpp:6465
void msgpack_unpack(msgpack::object const &o)
Definition acir.hpp:2955
friend bool operator==(const Simple &, const Simple &)
Definition acir.hpp:6435
void msgpack_unpack(msgpack::object const &o)
Definition acir.hpp:2939
friend bool operator==(const BrilligOutputs &, const BrilligOutputs &)
Definition acir.hpp:6403
void msgpack_unpack(msgpack::object const &o)
Definition acir.hpp:2970
std::variant< Simple, Array > value
Definition acir.hpp:2966
Acir::PublicInputs return_values
Definition acir.hpp:3501
std::vector< Acir::Opcode > opcodes
Definition acir.hpp:3498
friend bool operator==(const Circuit &, const Circuit &)
Definition acir.hpp:6494
std::optional< uint32_t > current_witness_index
Definition acir.hpp:3497
void msgpack_unpack(msgpack::object const &o)
Definition acir.hpp:3506
std::vector< Acir::Witness > private_parameters
Definition acir.hpp:3499
Acir::PublicInputs public_parameters
Definition acir.hpp:3500
std::string function_name
Definition acir.hpp:3496
std::vector< std::tuple< Acir::OpcodeLocation, Acir::AssertionPayload > > assert_messages
Definition acir.hpp:3502
std::vector< std::tuple< std::vector< uint8_t >, Acir::Witness > > linear_combinations
Definition acir.hpp:2796
std::vector< uint8_t > q_c
Definition acir.hpp:2797
std::vector< std::tuple< std::vector< uint8_t >, Acir::Witness, Acir::Witness > > mul_terms
Definition acir.hpp:2795
void msgpack_unpack(msgpack::object const &o)
Definition acir.hpp:2801
friend bool operator==(const Expression &, const Expression &)
Definition acir.hpp:6556
void msgpack_unpack(msgpack::object const &o)
Definition acir.hpp:3284
friend bool operator==(const Expression &, const Expression &)
Definition acir.hpp:6631
friend bool operator==(const Memory &, const Memory &)
Definition acir.hpp:6661
void msgpack_unpack(msgpack::object const &o)
Definition acir.hpp:3300
std::variant< Expression, Memory > value
Definition acir.hpp:3311
friend bool operator==(const ExpressionOrMemory &, const ExpressionOrMemory &)
Definition acir.hpp:6598
void msgpack_unpack(msgpack::object const &o)
Definition acir.hpp:3315
std::vector< uint8_t > value
Definition acir.hpp:2038
void msgpack_unpack(msgpack::object const &o)
Definition acir.hpp:2042
friend bool operator==(const Constant &, const Constant &)
Definition acir.hpp:6723
friend bool operator==(const Witness &, const Witness &)
Definition acir.hpp:6753
void msgpack_unpack(msgpack::object const &o)
Definition acir.hpp:2058
void msgpack_unpack(msgpack::object const &o)
Definition acir.hpp:2073
std::variant< Constant, Witness > value
Definition acir.hpp:2069
friend bool operator==(const FunctionInput &, const FunctionInput &)
Definition acir.hpp:6691
Acir::SemiFlattenedLength size
Definition acir.hpp:578
void msgpack_unpack(msgpack::object const &o)
Definition acir.hpp:582
friend bool operator==(const HeapArray &, const HeapArray &)
Definition acir.hpp:6783
Acir::MemoryAddress pointer
Definition acir.hpp:577
Acir::SemanticLength size
Definition acir.hpp:1099
void msgpack_unpack(msgpack::object const &o)
Definition acir.hpp:1103
friend bool operator==(const Array &, const Array &)
Definition acir.hpp:6881
std::vector< Acir::HeapValueType > value_types
Definition acir.hpp:1098
friend bool operator==(const Simple &, const Simple &)
Definition acir.hpp:6852
void msgpack_unpack(msgpack::object const &o)
Definition acir.hpp:1086
friend bool operator==(const Vector &, const Vector &)
Definition acir.hpp:6915
void msgpack_unpack(msgpack::object const &o)
Definition acir.hpp:1125
std::vector< Acir::HeapValueType > value_types
Definition acir.hpp:1121
friend bool operator==(const HeapValueType &, const HeapValueType &)
Definition acir.hpp:6820
void msgpack_unpack(msgpack::object const &o)
Definition acir.hpp:1144
std::variant< Simple, Array, Vector > value
Definition acir.hpp:1140
void msgpack_unpack(msgpack::object const &o)
Definition acir.hpp:1208
friend bool operator==(const HeapVector &, const HeapVector &)
Definition acir.hpp:6944
Acir::MemoryAddress size
Definition acir.hpp:1204
Acir::MemoryAddress pointer
Definition acir.hpp:1203
static void conv_fld_from_kvmap(std::map< std::string, msgpack::object const * > const &kvmap, std::string const &struct_name, std::string const &field_name, T &field, bool is_optional)
Definition acir.hpp:27
static std::map< std::string, msgpack::object const * > make_kvmap(msgpack::object const &o, std::string const &name)
Definition acir.hpp:8
static void conv_fld_from_array(msgpack::object_array const &array, std::string const &struct_name, std::string const &field_name, T &field, uint32_t index)
Definition acir.hpp:47
friend bool operator==(const U128 &, const U128 &)
Definition acir.hpp:7128
void msgpack_unpack(msgpack::object const &o)
Definition acir.hpp:352
void msgpack_unpack(msgpack::object const &o)
Definition acir.hpp:334
friend bool operator==(const U16 &, const U16 &)
Definition acir.hpp:7059
void msgpack_unpack(msgpack::object const &o)
Definition acir.hpp:322
friend bool operator==(const U1 &, const U1 &)
Definition acir.hpp:7013
friend bool operator==(const U32 &, const U32 &)
Definition acir.hpp:7082
void msgpack_unpack(msgpack::object const &o)
Definition acir.hpp:340
void msgpack_unpack(msgpack::object const &o)
Definition acir.hpp:346
friend bool operator==(const U64 &, const U64 &)
Definition acir.hpp:7105
void msgpack_unpack(msgpack::object const &o)
Definition acir.hpp:328
friend bool operator==(const U8 &, const U8 &)
Definition acir.hpp:7036
void msgpack_unpack(msgpack::object const &o)
Definition acir.hpp:359
friend bool operator==(const IntegerBitSize &, const IntegerBitSize &)
Definition acir.hpp:6981
std::variant< U1, U8, U16, U32, U64, U128 > value
Definition acir.hpp:355
Acir::Expression value
Definition acir.hpp:3021
friend bool operator==(const MemOp &, const MemOp &)
Definition acir.hpp:7151
void msgpack_unpack(msgpack::object const &o)
Definition acir.hpp:3025
Acir::Expression operation
Definition acir.hpp:3019
Acir::Expression index
Definition acir.hpp:3020
friend bool operator==(const Direct &, const Direct &)
Definition acir.hpp:7225
void msgpack_unpack(msgpack::object const &o)
Definition acir.hpp:481
void msgpack_unpack(msgpack::object const &o)
Definition acir.hpp:497
friend bool operator==(const Relative &, const Relative &)
Definition acir.hpp:7254
void msgpack_unpack(msgpack::object const &o)
Definition acir.hpp:512
friend bool operator==(const MemoryAddress &, const MemoryAddress &)
Definition acir.hpp:7193
std::variant< Direct, Relative > value
Definition acir.hpp:508
void msgpack_unpack(msgpack::object const &o)
Definition acir.hpp:3051
Acir::Expression value
Definition acir.hpp:3047
friend bool operator==(const AssertZero &, const AssertZero &)
Definition acir.hpp:7316
void msgpack_unpack(msgpack::object const &o)
Definition acir.hpp:3067
Acir::BlackBoxFuncCall value
Definition acir.hpp:3063
friend bool operator==(const BlackBoxFuncCall &, const BlackBoxFuncCall &)
Definition acir.hpp:7345
std::optional< Acir::Expression > predicate
Definition acir.hpp:3131
friend bool operator==(const BrilligCall &, const BrilligCall &)
Definition acir.hpp:7447
std::vector< Acir::BrilligInputs > inputs
Definition acir.hpp:3129
std::vector< Acir::BrilligOutputs > outputs
Definition acir.hpp:3130
void msgpack_unpack(msgpack::object const &o)
Definition acir.hpp:3135
void msgpack_unpack(msgpack::object const &o)
Definition acir.hpp:3164
friend bool operator==(const Call &, const Call &)
Definition acir.hpp:7491
std::vector< Acir::Witness > outputs
Definition acir.hpp:3159
std::optional< Acir::Expression > predicate
Definition acir.hpp:3160
std::vector< Acir::Witness > inputs
Definition acir.hpp:3158
Acir::BlockId block_id
Definition acir.hpp:3102
std::vector< Acir::Witness > init
Definition acir.hpp:3103
Acir::BlockType block_type
Definition acir.hpp:3104
void msgpack_unpack(msgpack::object const &o)
Definition acir.hpp:3108
friend bool operator==(const MemoryInit &, const MemoryInit &)
Definition acir.hpp:7408
friend bool operator==(const MemoryOp &, const MemoryOp &)
Definition acir.hpp:7375
void msgpack_unpack(msgpack::object const &o)
Definition acir.hpp:3084
Acir::BlockId block_id
Definition acir.hpp:3079
std::variant< AssertZero, BlackBoxFuncCall, MemoryOp, MemoryInit, BrilligCall, Call > value
Definition acir.hpp:3185
void msgpack_unpack(msgpack::object const &o)
Definition acir.hpp:3189
friend bool operator==(const Opcode &, const Opcode &)
Definition acir.hpp:7284
void msgpack_unpack(msgpack::object const &o)
Definition acir.hpp:3393
friend bool operator==(const Acir &, const Acir &)
Definition acir.hpp:7566
friend bool operator==(const Brillig &, const Brillig &)
Definition acir.hpp:7595
void msgpack_unpack(msgpack::object const &o)
Definition acir.hpp:3410
friend bool operator==(const OpcodeLocation &, const OpcodeLocation &)
Definition acir.hpp:7534
void msgpack_unpack(msgpack::object const &o)
Definition acir.hpp:3431
std::variant< Acir, Brillig > value
Definition acir.hpp:3427
std::vector< Acir::Circuit > functions
Definition acir.hpp:3557
friend bool operator==(const Program &, const Program &)
Definition acir.hpp:7630
std::vector< Acir::BrilligBytecode > unconstrained_functions
Definition acir.hpp:3558
void msgpack_unpack(msgpack::object const &o)
Definition acir.hpp:3562
std::vector< Acir::Circuit > functions
Definition acir.hpp:3580
void msgpack_unpack(msgpack::object const &o)
Definition acir.hpp:3585
std::monostate unconstrained_functions
Definition acir.hpp:3581
friend bool operator==(const ProgramWithoutBrillig &, const ProgramWithoutBrillig &)
Definition acir.hpp:7668
friend bool operator==(const PublicInputs &, const PublicInputs &)
Definition acir.hpp:7707
std::vector< Acir::Witness > value
Definition acir.hpp:3480
void msgpack_unpack(msgpack::object const &o)
Definition acir.hpp:3484
friend bool operator==(const SemanticLength &, const SemanticLength &)
Definition acir.hpp:7739
void msgpack_unpack(msgpack::object const &o)
Definition acir.hpp:1066
void msgpack_unpack(msgpack::object const &o)
Definition acir.hpp:565
friend bool operator==(const SemiFlattenedLength &, const SemiFlattenedLength &)
Definition acir.hpp:7771
friend bool operator==(const HeapArray &, const HeapArray &)
Definition acir.hpp:7866
void msgpack_unpack(msgpack::object const &o)
Definition acir.hpp:1248
void msgpack_unpack(msgpack::object const &o)
Definition acir.hpp:1264
friend bool operator==(const HeapVector &, const HeapVector &)
Definition acir.hpp:7896
void msgpack_unpack(msgpack::object const &o)
Definition acir.hpp:1232
friend bool operator==(const MemoryAddress &, const MemoryAddress &)
Definition acir.hpp:7836
Acir::MemoryAddress value
Definition acir.hpp:1228
void msgpack_unpack(msgpack::object const &o)
Definition acir.hpp:1279
std::variant< MemoryAddress, HeapArray, HeapVector > value
Definition acir.hpp:1275
friend bool operator==(const ValueOrArray &, const ValueOrArray &)
Definition acir.hpp:7804
uint32_t value
Definition acir.hpp:2020
void msgpack_unpack(msgpack::object const &o)
Definition acir.hpp:2024
friend bool operator==(const Witness &, const Witness &)
Definition acir.hpp:7926
static T deserialize(Deserializer &deserializer)
static void serialize(const T &value, Serializer &serializer)
void throw_or_abort(std::string const &err)