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 if (o.type != msgpack::type::MAP) {
460 throw_or_abort("expected MAP for enum variant, got STR (unit variant syntax for non-unit variant)");
461 }
462 try {
463 o.via.map.ptr[0].val.convert(v);
464 } catch (const msgpack::type_error&) {
465 std::cerr << o << std::endl;
466 throw_or_abort("error converting into enum variant 'BitSize::Integer'");
467 }
468
469 value = v;
470 } else {
471 std::cerr << o << std::endl;
472 throw_or_abort("unknown 'BitSize' enum variant: " + tag);
473 }
474 }
475};
476
478
479 struct Direct {
480 uint32_t value;
481
482 friend bool operator==(const Direct&, const Direct&);
483
484 void msgpack_unpack(msgpack::object const& o)
485 {
486 try {
487 o.convert(value);
488 } catch (const msgpack::type_error&) {
489 std::cerr << o << std::endl;
490 throw_or_abort("error converting into newtype 'Direct'");
491 }
492 }
493 };
494
495 struct Relative {
496 uint32_t value;
497
498 friend bool operator==(const Relative&, const Relative&);
499
500 void msgpack_unpack(msgpack::object const& o)
501 {
502 try {
503 o.convert(value);
504 } catch (const msgpack::type_error&) {
505 std::cerr << o << std::endl;
506 throw_or_abort("error converting into newtype 'Relative'");
507 }
508 }
509 };
510
512
513 friend bool operator==(const MemoryAddress&, const MemoryAddress&);
514
515 void msgpack_unpack(msgpack::object const& o)
516 {
517
518 if (o.type != msgpack::type::object_type::MAP && o.type != msgpack::type::object_type::STR) {
519 std::cerr << o << std::endl;
520 throw_or_abort("expected MAP or STR for enum 'MemoryAddress'; got type " + std::to_string(o.type));
521 }
522 if (o.type == msgpack::type::object_type::MAP && o.via.map.size != 1) {
523 throw_or_abort("expected 1 entry for enum 'MemoryAddress'; got " + std::to_string(o.via.map.size));
524 }
525 std::string tag;
526 try {
527 if (o.type == msgpack::type::object_type::MAP) {
528 o.via.map.ptr[0].key.convert(tag);
529 } else {
530 o.convert(tag);
531 }
532 } catch (const msgpack::type_error&) {
533 std::cerr << o << std::endl;
534 throw_or_abort("error converting tag to string for enum 'MemoryAddress'");
535 }
536 if (tag == "Direct") {
537 Direct v;
538 if (o.type != msgpack::type::MAP) {
539 throw_or_abort("expected MAP for enum variant, got STR (unit variant syntax for non-unit variant)");
540 }
541 try {
542 o.via.map.ptr[0].val.convert(v);
543 } catch (const msgpack::type_error&) {
544 std::cerr << o << std::endl;
545 throw_or_abort("error converting into enum variant 'MemoryAddress::Direct'");
546 }
547
548 value = v;
549 } else if (tag == "Relative") {
550 Relative v;
551 if (o.type != msgpack::type::MAP) {
552 throw_or_abort("expected MAP for enum variant, got STR (unit variant syntax for non-unit variant)");
553 }
554 try {
555 o.via.map.ptr[0].val.convert(v);
556 } catch (const msgpack::type_error&) {
557 std::cerr << o << std::endl;
558 throw_or_abort("error converting into enum variant 'MemoryAddress::Relative'");
559 }
560
561 value = v;
562 } else {
563 std::cerr << o << std::endl;
564 throw_or_abort("unknown 'MemoryAddress' enum variant: " + tag);
565 }
566 }
567};
568
570 uint32_t value;
571
572 friend bool operator==(const SemiFlattenedLength&, const SemiFlattenedLength&);
573
574 void msgpack_unpack(msgpack::object const& o)
575 {
576 try {
577 o.convert(value);
578 } catch (const msgpack::type_error&) {
579 std::cerr << o << std::endl;
580 throw_or_abort("error converting into newtype 'SemiFlattenedLength'");
581 }
582 }
583};
584
585struct HeapArray {
588
589 friend bool operator==(const HeapArray&, const HeapArray&);
590
591 void msgpack_unpack(msgpack::object const& o)
592 {
593 std::string name = "HeapArray";
594 if (o.type == msgpack::type::MAP) {
595 auto kvmap = Helpers::make_kvmap(o, name);
596 Helpers::conv_fld_from_kvmap(kvmap, name, "pointer", pointer, false);
597 Helpers::conv_fld_from_kvmap(kvmap, name, "size", size, false);
598 } else if (o.type == msgpack::type::ARRAY) {
599 auto array = o.via.array;
600 Helpers::conv_fld_from_array(array, name, "pointer", pointer, 0);
601 Helpers::conv_fld_from_array(array, name, "size", size, 1);
602 } else {
603 throw_or_abort("expected MAP or ARRAY for " + name);
604 }
605 }
606};
607
609
615
616 friend bool operator==(const AES128Encrypt&, const AES128Encrypt&);
617
618 void msgpack_unpack(msgpack::object const& o)
619 {
620 std::string name = "AES128Encrypt";
621 if (o.type == msgpack::type::MAP) {
622 auto kvmap = Helpers::make_kvmap(o, name);
623 Helpers::conv_fld_from_kvmap(kvmap, name, "inputs", inputs, false);
624 Helpers::conv_fld_from_kvmap(kvmap, name, "iv", iv, false);
625 Helpers::conv_fld_from_kvmap(kvmap, name, "key", key, false);
626 Helpers::conv_fld_from_kvmap(kvmap, name, "outputs", outputs, false);
627 } else if (o.type == msgpack::type::ARRAY) {
628 auto array = o.via.array;
629 Helpers::conv_fld_from_array(array, name, "inputs", inputs, 0);
630 Helpers::conv_fld_from_array(array, name, "iv", iv, 1);
631 Helpers::conv_fld_from_array(array, name, "key", key, 2);
632 Helpers::conv_fld_from_array(array, name, "outputs", outputs, 3);
633 } else {
634 throw_or_abort("expected MAP or ARRAY for " + name);
635 }
636 }
637 };
638
639 struct Blake2s {
642
643 friend bool operator==(const Blake2s&, const Blake2s&);
644
645 void msgpack_unpack(msgpack::object const& o)
646 {
647 std::string name = "Blake2s";
648 if (o.type == msgpack::type::MAP) {
649 auto kvmap = Helpers::make_kvmap(o, name);
650 Helpers::conv_fld_from_kvmap(kvmap, name, "message", message, false);
651 Helpers::conv_fld_from_kvmap(kvmap, name, "output", output, false);
652 } else if (o.type == msgpack::type::ARRAY) {
653 auto array = o.via.array;
654 Helpers::conv_fld_from_array(array, name, "message", message, 0);
655 Helpers::conv_fld_from_array(array, name, "output", output, 1);
656 } else {
657 throw_or_abort("expected MAP or ARRAY for " + name);
658 }
659 }
660 };
661
662 struct Blake3 {
665
666 friend bool operator==(const Blake3&, const Blake3&);
667
668 void msgpack_unpack(msgpack::object const& o)
669 {
670 std::string name = "Blake3";
671 if (o.type == msgpack::type::MAP) {
672 auto kvmap = Helpers::make_kvmap(o, name);
673 Helpers::conv_fld_from_kvmap(kvmap, name, "message", message, false);
674 Helpers::conv_fld_from_kvmap(kvmap, name, "output", output, false);
675 } else if (o.type == msgpack::type::ARRAY) {
676 auto array = o.via.array;
677 Helpers::conv_fld_from_array(array, name, "message", message, 0);
678 Helpers::conv_fld_from_array(array, name, "output", output, 1);
679 } else {
680 throw_or_abort("expected MAP or ARRAY for " + name);
681 }
682 }
683 };
684
685 struct Keccakf1600 {
688
689 friend bool operator==(const Keccakf1600&, const Keccakf1600&);
690
691 void msgpack_unpack(msgpack::object const& o)
692 {
693 std::string name = "Keccakf1600";
694 if (o.type == msgpack::type::MAP) {
695 auto kvmap = Helpers::make_kvmap(o, name);
696 Helpers::conv_fld_from_kvmap(kvmap, name, "input", input, false);
697 Helpers::conv_fld_from_kvmap(kvmap, name, "output", output, false);
698 } else if (o.type == msgpack::type::ARRAY) {
699 auto array = o.via.array;
700 Helpers::conv_fld_from_array(array, name, "input", input, 0);
701 Helpers::conv_fld_from_array(array, name, "output", output, 1);
702 } else {
703 throw_or_abort("expected MAP or ARRAY for " + name);
704 }
705 }
706 };
707
714
715 friend bool operator==(const EcdsaSecp256k1&, const EcdsaSecp256k1&);
716
717 void msgpack_unpack(msgpack::object const& o)
718 {
719 std::string name = "EcdsaSecp256k1";
720 if (o.type == msgpack::type::MAP) {
721 auto kvmap = Helpers::make_kvmap(o, name);
722 Helpers::conv_fld_from_kvmap(kvmap, name, "hashed_msg", hashed_msg, false);
723 Helpers::conv_fld_from_kvmap(kvmap, name, "public_key_x", public_key_x, false);
724 Helpers::conv_fld_from_kvmap(kvmap, name, "public_key_y", public_key_y, false);
725 Helpers::conv_fld_from_kvmap(kvmap, name, "signature", signature, false);
726 Helpers::conv_fld_from_kvmap(kvmap, name, "result", result, false);
727 } else if (o.type == msgpack::type::ARRAY) {
728 auto array = o.via.array;
729 Helpers::conv_fld_from_array(array, name, "hashed_msg", hashed_msg, 0);
730 Helpers::conv_fld_from_array(array, name, "public_key_x", public_key_x, 1);
731 Helpers::conv_fld_from_array(array, name, "public_key_y", public_key_y, 2);
732 Helpers::conv_fld_from_array(array, name, "signature", signature, 3);
733 Helpers::conv_fld_from_array(array, name, "result", result, 4);
734 } else {
735 throw_or_abort("expected MAP or ARRAY for " + name);
736 }
737 }
738 };
739
746
747 friend bool operator==(const EcdsaSecp256r1&, const EcdsaSecp256r1&);
748
749 void msgpack_unpack(msgpack::object const& o)
750 {
751 std::string name = "EcdsaSecp256r1";
752 if (o.type == msgpack::type::MAP) {
753 auto kvmap = Helpers::make_kvmap(o, name);
754 Helpers::conv_fld_from_kvmap(kvmap, name, "hashed_msg", hashed_msg, false);
755 Helpers::conv_fld_from_kvmap(kvmap, name, "public_key_x", public_key_x, false);
756 Helpers::conv_fld_from_kvmap(kvmap, name, "public_key_y", public_key_y, false);
757 Helpers::conv_fld_from_kvmap(kvmap, name, "signature", signature, false);
758 Helpers::conv_fld_from_kvmap(kvmap, name, "result", result, false);
759 } else if (o.type == msgpack::type::ARRAY) {
760 auto array = o.via.array;
761 Helpers::conv_fld_from_array(array, name, "hashed_msg", hashed_msg, 0);
762 Helpers::conv_fld_from_array(array, name, "public_key_x", public_key_x, 1);
763 Helpers::conv_fld_from_array(array, name, "public_key_y", public_key_y, 2);
764 Helpers::conv_fld_from_array(array, name, "signature", signature, 3);
765 Helpers::conv_fld_from_array(array, name, "result", result, 4);
766 } else {
767 throw_or_abort("expected MAP or ARRAY for " + name);
768 }
769 }
770 };
771
776
777 friend bool operator==(const MultiScalarMul&, const MultiScalarMul&);
778
779 void msgpack_unpack(msgpack::object const& o)
780 {
781 std::string name = "MultiScalarMul";
782 if (o.type == msgpack::type::MAP) {
783 auto kvmap = Helpers::make_kvmap(o, name);
784 Helpers::conv_fld_from_kvmap(kvmap, name, "points", points, false);
785 Helpers::conv_fld_from_kvmap(kvmap, name, "scalars", scalars, false);
786 Helpers::conv_fld_from_kvmap(kvmap, name, "outputs", outputs, false);
787 } else if (o.type == msgpack::type::ARRAY) {
788 auto array = o.via.array;
789 Helpers::conv_fld_from_array(array, name, "points", points, 0);
790 Helpers::conv_fld_from_array(array, name, "scalars", scalars, 1);
791 Helpers::conv_fld_from_array(array, name, "outputs", outputs, 2);
792 } else {
793 throw_or_abort("expected MAP or ARRAY for " + name);
794 }
795 }
796 };
797
806
807 friend bool operator==(const EmbeddedCurveAdd&, const EmbeddedCurveAdd&);
808
809 void msgpack_unpack(msgpack::object const& o)
810 {
811 std::string name = "EmbeddedCurveAdd";
812 if (o.type == msgpack::type::MAP) {
813 auto kvmap = Helpers::make_kvmap(o, name);
814 Helpers::conv_fld_from_kvmap(kvmap, name, "input1_x", input1_x, false);
815 Helpers::conv_fld_from_kvmap(kvmap, name, "input1_y", input1_y, false);
816 Helpers::conv_fld_from_kvmap(kvmap, name, "input1_infinite", input1_infinite, false);
817 Helpers::conv_fld_from_kvmap(kvmap, name, "input2_x", input2_x, false);
818 Helpers::conv_fld_from_kvmap(kvmap, name, "input2_y", input2_y, false);
819 Helpers::conv_fld_from_kvmap(kvmap, name, "input2_infinite", input2_infinite, false);
820 Helpers::conv_fld_from_kvmap(kvmap, name, "result", result, false);
821 } else if (o.type == msgpack::type::ARRAY) {
822 auto array = o.via.array;
823 Helpers::conv_fld_from_array(array, name, "input1_x", input1_x, 0);
824 Helpers::conv_fld_from_array(array, name, "input1_y", input1_y, 1);
825 Helpers::conv_fld_from_array(array, name, "input1_infinite", input1_infinite, 2);
826 Helpers::conv_fld_from_array(array, name, "input2_x", input2_x, 3);
827 Helpers::conv_fld_from_array(array, name, "input2_y", input2_y, 4);
828 Helpers::conv_fld_from_array(array, name, "input2_infinite", input2_infinite, 5);
829 Helpers::conv_fld_from_array(array, name, "result", result, 6);
830 } else {
831 throw_or_abort("expected MAP or ARRAY for " + name);
832 }
833 }
834 };
835
839
840 friend bool operator==(const Poseidon2Permutation&, const Poseidon2Permutation&);
841
842 void msgpack_unpack(msgpack::object const& o)
843 {
844 std::string name = "Poseidon2Permutation";
845 if (o.type == msgpack::type::MAP) {
846 auto kvmap = Helpers::make_kvmap(o, name);
847 Helpers::conv_fld_from_kvmap(kvmap, name, "message", message, false);
848 Helpers::conv_fld_from_kvmap(kvmap, name, "output", output, false);
849 } else if (o.type == msgpack::type::ARRAY) {
850 auto array = o.via.array;
851 Helpers::conv_fld_from_array(array, name, "message", message, 0);
852 Helpers::conv_fld_from_array(array, name, "output", output, 1);
853 } else {
854 throw_or_abort("expected MAP or ARRAY for " + name);
855 }
856 }
857 };
858
863
864 friend bool operator==(const Sha256Compression&, const Sha256Compression&);
865
866 void msgpack_unpack(msgpack::object const& o)
867 {
868 std::string name = "Sha256Compression";
869 if (o.type == msgpack::type::MAP) {
870 auto kvmap = Helpers::make_kvmap(o, name);
871 Helpers::conv_fld_from_kvmap(kvmap, name, "input", input, false);
872 Helpers::conv_fld_from_kvmap(kvmap, name, "hash_values", hash_values, false);
873 Helpers::conv_fld_from_kvmap(kvmap, name, "output", output, false);
874 } else if (o.type == msgpack::type::ARRAY) {
875 auto array = o.via.array;
876 Helpers::conv_fld_from_array(array, name, "input", input, 0);
877 Helpers::conv_fld_from_array(array, name, "hash_values", hash_values, 1);
878 Helpers::conv_fld_from_array(array, name, "output", output, 2);
879 } else {
880 throw_or_abort("expected MAP or ARRAY for " + name);
881 }
882 }
883 };
884
885 struct ToRadix {
891
892 friend bool operator==(const ToRadix&, const ToRadix&);
893
894 void msgpack_unpack(msgpack::object const& o)
895 {
896 std::string name = "ToRadix";
897 if (o.type == msgpack::type::MAP) {
898 auto kvmap = Helpers::make_kvmap(o, name);
899 Helpers::conv_fld_from_kvmap(kvmap, name, "input", input, false);
900 Helpers::conv_fld_from_kvmap(kvmap, name, "radix", radix, false);
901 Helpers::conv_fld_from_kvmap(kvmap, name, "output_pointer", output_pointer, false);
902 Helpers::conv_fld_from_kvmap(kvmap, name, "num_limbs", num_limbs, false);
903 Helpers::conv_fld_from_kvmap(kvmap, name, "output_bits", output_bits, false);
904 } else if (o.type == msgpack::type::ARRAY) {
905 auto array = o.via.array;
906 Helpers::conv_fld_from_array(array, name, "input", input, 0);
907 Helpers::conv_fld_from_array(array, name, "radix", radix, 1);
908 Helpers::conv_fld_from_array(array, name, "output_pointer", output_pointer, 2);
909 Helpers::conv_fld_from_array(array, name, "num_limbs", num_limbs, 3);
910 Helpers::conv_fld_from_array(array, name, "output_bits", output_bits, 4);
911 } else {
912 throw_or_abort("expected MAP or ARRAY for " + name);
913 }
914 }
915 };
916
917 std::variant<AES128Encrypt,
918 Blake2s,
919 Blake3,
920 Keccakf1600,
921 EcdsaSecp256k1,
922 EcdsaSecp256r1,
923 MultiScalarMul,
924 EmbeddedCurveAdd,
925 Poseidon2Permutation,
926 Sha256Compression,
927 ToRadix>
929
930 friend bool operator==(const BlackBoxOp&, const BlackBoxOp&);
931
932 void msgpack_unpack(msgpack::object const& o)
933 {
934
935 if (o.type != msgpack::type::object_type::MAP && o.type != msgpack::type::object_type::STR) {
936 std::cerr << o << std::endl;
937 throw_or_abort("expected MAP or STR for enum 'BlackBoxOp'; got type " + std::to_string(o.type));
938 }
939 if (o.type == msgpack::type::object_type::MAP && o.via.map.size != 1) {
940 throw_or_abort("expected 1 entry for enum 'BlackBoxOp'; got " + std::to_string(o.via.map.size));
941 }
942 std::string tag;
943 try {
944 if (o.type == msgpack::type::object_type::MAP) {
945 o.via.map.ptr[0].key.convert(tag);
946 } else {
947 o.convert(tag);
948 }
949 } catch (const msgpack::type_error&) {
950 std::cerr << o << std::endl;
951 throw_or_abort("error converting tag to string for enum 'BlackBoxOp'");
952 }
953 if (tag == "AES128Encrypt") {
955 if (o.type != msgpack::type::MAP) {
956 throw_or_abort("expected MAP for enum variant, got STR (unit variant syntax for non-unit variant)");
957 }
958 try {
959 o.via.map.ptr[0].val.convert(v);
960 } catch (const msgpack::type_error&) {
961 std::cerr << o << std::endl;
962 throw_or_abort("error converting into enum variant 'BlackBoxOp::AES128Encrypt'");
963 }
964
965 value = v;
966 } else if (tag == "Blake2s") {
967 Blake2s v;
968 if (o.type != msgpack::type::MAP) {
969 throw_or_abort("expected MAP for enum variant, got STR (unit variant syntax for non-unit variant)");
970 }
971 try {
972 o.via.map.ptr[0].val.convert(v);
973 } catch (const msgpack::type_error&) {
974 std::cerr << o << std::endl;
975 throw_or_abort("error converting into enum variant 'BlackBoxOp::Blake2s'");
976 }
977
978 value = v;
979 } else if (tag == "Blake3") {
980 Blake3 v;
981 if (o.type != msgpack::type::MAP) {
982 throw_or_abort("expected MAP for enum variant, got STR (unit variant syntax for non-unit variant)");
983 }
984 try {
985 o.via.map.ptr[0].val.convert(v);
986 } catch (const msgpack::type_error&) {
987 std::cerr << o << std::endl;
988 throw_or_abort("error converting into enum variant 'BlackBoxOp::Blake3'");
989 }
990
991 value = v;
992 } else if (tag == "Keccakf1600") {
993 Keccakf1600 v;
994 if (o.type != msgpack::type::MAP) {
995 throw_or_abort("expected MAP for enum variant, got STR (unit variant syntax for non-unit variant)");
996 }
997 try {
998 o.via.map.ptr[0].val.convert(v);
999 } catch (const msgpack::type_error&) {
1000 std::cerr << o << std::endl;
1001 throw_or_abort("error converting into enum variant 'BlackBoxOp::Keccakf1600'");
1002 }
1003
1004 value = v;
1005 } else if (tag == "EcdsaSecp256k1") {
1007 if (o.type != msgpack::type::MAP) {
1008 throw_or_abort("expected MAP for enum variant, got STR (unit variant syntax for non-unit variant)");
1009 }
1010 try {
1011 o.via.map.ptr[0].val.convert(v);
1012 } catch (const msgpack::type_error&) {
1013 std::cerr << o << std::endl;
1014 throw_or_abort("error converting into enum variant 'BlackBoxOp::EcdsaSecp256k1'");
1015 }
1016
1017 value = v;
1018 } else if (tag == "EcdsaSecp256r1") {
1020 if (o.type != msgpack::type::MAP) {
1021 throw_or_abort("expected MAP for enum variant, got STR (unit variant syntax for non-unit variant)");
1022 }
1023 try {
1024 o.via.map.ptr[0].val.convert(v);
1025 } catch (const msgpack::type_error&) {
1026 std::cerr << o << std::endl;
1027 throw_or_abort("error converting into enum variant 'BlackBoxOp::EcdsaSecp256r1'");
1028 }
1029
1030 value = v;
1031 } else if (tag == "MultiScalarMul") {
1033 if (o.type != msgpack::type::MAP) {
1034 throw_or_abort("expected MAP for enum variant, got STR (unit variant syntax for non-unit variant)");
1035 }
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::MultiScalarMul'");
1041 }
1042
1043 value = v;
1044 } else if (tag == "EmbeddedCurveAdd") {
1046 if (o.type != msgpack::type::MAP) {
1047 throw_or_abort("expected MAP for enum variant, got STR (unit variant syntax for non-unit variant)");
1048 }
1049 try {
1050 o.via.map.ptr[0].val.convert(v);
1051 } catch (const msgpack::type_error&) {
1052 std::cerr << o << std::endl;
1053 throw_or_abort("error converting into enum variant 'BlackBoxOp::EmbeddedCurveAdd'");
1054 }
1055
1056 value = v;
1057 } else if (tag == "Poseidon2Permutation") {
1059 if (o.type != msgpack::type::MAP) {
1060 throw_or_abort("expected MAP for enum variant, got STR (unit variant syntax for non-unit variant)");
1061 }
1062 try {
1063 o.via.map.ptr[0].val.convert(v);
1064 } catch (const msgpack::type_error&) {
1065 std::cerr << o << std::endl;
1066 throw_or_abort("error converting into enum variant 'BlackBoxOp::Poseidon2Permutation'");
1067 }
1068
1069 value = v;
1070 } else if (tag == "Sha256Compression") {
1072 if (o.type != msgpack::type::MAP) {
1073 throw_or_abort("expected MAP for enum variant, got STR (unit variant syntax for non-unit variant)");
1074 }
1075 try {
1076 o.via.map.ptr[0].val.convert(v);
1077 } catch (const msgpack::type_error&) {
1078 std::cerr << o << std::endl;
1079 throw_or_abort("error converting into enum variant 'BlackBoxOp::Sha256Compression'");
1080 }
1081
1082 value = v;
1083 } else if (tag == "ToRadix") {
1084 ToRadix v;
1085 if (o.type != msgpack::type::MAP) {
1086 throw_or_abort("expected MAP for enum variant, got STR (unit variant syntax for non-unit variant)");
1087 }
1088 try {
1089 o.via.map.ptr[0].val.convert(v);
1090 } catch (const msgpack::type_error&) {
1091 std::cerr << o << std::endl;
1092 throw_or_abort("error converting into enum variant 'BlackBoxOp::ToRadix'");
1093 }
1094
1095 value = v;
1096 } else {
1097 std::cerr << o << std::endl;
1098 throw_or_abort("unknown 'BlackBoxOp' enum variant: " + tag);
1099 }
1100 }
1101};
1102
1104 uint32_t value;
1105
1106 friend bool operator==(const SemanticLength&, const SemanticLength&);
1107
1108 void msgpack_unpack(msgpack::object const& o)
1109 {
1110 try {
1111 o.convert(value);
1112 } catch (const msgpack::type_error&) {
1113 std::cerr << o << std::endl;
1114 throw_or_abort("error converting into newtype 'SemanticLength'");
1115 }
1116 }
1117};
1118
1119struct HeapValueType;
1120
1122
1123 struct Simple {
1125
1126 friend bool operator==(const Simple&, const Simple&);
1127
1128 void msgpack_unpack(msgpack::object const& o)
1129 {
1130 try {
1131 o.convert(value);
1132 } catch (const msgpack::type_error&) {
1133 std::cerr << o << std::endl;
1134 throw_or_abort("error converting into newtype 'Simple'");
1135 }
1136 }
1137 };
1138
1139 struct Array {
1140 std::vector<Acir::HeapValueType> value_types;
1142
1143 friend bool operator==(const Array&, const Array&);
1144
1145 void msgpack_unpack(msgpack::object const& o)
1146 {
1147 std::string name = "Array";
1148 if (o.type == msgpack::type::MAP) {
1149 auto kvmap = Helpers::make_kvmap(o, name);
1150 Helpers::conv_fld_from_kvmap(kvmap, name, "value_types", value_types, false);
1151 Helpers::conv_fld_from_kvmap(kvmap, name, "size", size, false);
1152 } else if (o.type == msgpack::type::ARRAY) {
1153 auto array = o.via.array;
1154 Helpers::conv_fld_from_array(array, name, "value_types", value_types, 0);
1155 Helpers::conv_fld_from_array(array, name, "size", size, 1);
1156 } else {
1157 throw_or_abort("expected MAP or ARRAY for " + name);
1158 }
1159 }
1160 };
1161
1162 struct Vector {
1163 std::vector<Acir::HeapValueType> value_types;
1164
1165 friend bool operator==(const Vector&, const Vector&);
1166
1167 void msgpack_unpack(msgpack::object const& o)
1168 {
1169 std::string name = "Vector";
1170 if (o.type == msgpack::type::MAP) {
1171 auto kvmap = Helpers::make_kvmap(o, name);
1172 Helpers::conv_fld_from_kvmap(kvmap, name, "value_types", value_types, false);
1173 } else if (o.type == msgpack::type::ARRAY) {
1174 auto array = o.via.array;
1175 Helpers::conv_fld_from_array(array, name, "value_types", value_types, 0);
1176 } else {
1177 throw_or_abort("expected MAP or ARRAY for " + name);
1178 }
1179 }
1180 };
1181
1183
1184 friend bool operator==(const HeapValueType&, const HeapValueType&);
1185
1186 void msgpack_unpack(msgpack::object const& o)
1187 {
1188
1189 if (o.type != msgpack::type::object_type::MAP && o.type != msgpack::type::object_type::STR) {
1190 std::cerr << o << std::endl;
1191 throw_or_abort("expected MAP or STR for enum 'HeapValueType'; got type " + std::to_string(o.type));
1192 }
1193 if (o.type == msgpack::type::object_type::MAP && o.via.map.size != 1) {
1194 throw_or_abort("expected 1 entry for enum 'HeapValueType'; got " + std::to_string(o.via.map.size));
1195 }
1196 std::string tag;
1197 try {
1198 if (o.type == msgpack::type::object_type::MAP) {
1199 o.via.map.ptr[0].key.convert(tag);
1200 } else {
1201 o.convert(tag);
1202 }
1203 } catch (const msgpack::type_error&) {
1204 std::cerr << o << std::endl;
1205 throw_or_abort("error converting tag to string for enum 'HeapValueType'");
1206 }
1207 if (tag == "Simple") {
1208 Simple v;
1209 if (o.type != msgpack::type::MAP) {
1210 throw_or_abort("expected MAP for enum variant, got STR (unit variant syntax for non-unit variant)");
1211 }
1212 try {
1213 o.via.map.ptr[0].val.convert(v);
1214 } catch (const msgpack::type_error&) {
1215 std::cerr << o << std::endl;
1216 throw_or_abort("error converting into enum variant 'HeapValueType::Simple'");
1217 }
1218
1219 value = v;
1220 } else if (tag == "Array") {
1221 Array v;
1222 if (o.type != msgpack::type::MAP) {
1223 throw_or_abort("expected MAP for enum variant, got STR (unit variant syntax for non-unit variant)");
1224 }
1225 try {
1226 o.via.map.ptr[0].val.convert(v);
1227 } catch (const msgpack::type_error&) {
1228 std::cerr << o << std::endl;
1229 throw_or_abort("error converting into enum variant 'HeapValueType::Array'");
1230 }
1231
1232 value = v;
1233 } else if (tag == "Vector") {
1234 Vector v;
1235 if (o.type != msgpack::type::MAP) {
1236 throw_or_abort("expected MAP for enum variant, got STR (unit variant syntax for non-unit variant)");
1237 }
1238 try {
1239 o.via.map.ptr[0].val.convert(v);
1240 } catch (const msgpack::type_error&) {
1241 std::cerr << o << std::endl;
1242 throw_or_abort("error converting into enum variant 'HeapValueType::Vector'");
1243 }
1244
1245 value = v;
1246 } else {
1247 std::cerr << o << std::endl;
1248 throw_or_abort("unknown 'HeapValueType' enum variant: " + tag);
1249 }
1250 }
1251};
1252
1256
1257 friend bool operator==(const HeapVector&, const HeapVector&);
1258
1259 void msgpack_unpack(msgpack::object const& o)
1260 {
1261 std::string name = "HeapVector";
1262 if (o.type == msgpack::type::MAP) {
1263 auto kvmap = Helpers::make_kvmap(o, name);
1264 Helpers::conv_fld_from_kvmap(kvmap, name, "pointer", pointer, false);
1265 Helpers::conv_fld_from_kvmap(kvmap, name, "size", size, false);
1266 } else if (o.type == msgpack::type::ARRAY) {
1267 auto array = o.via.array;
1268 Helpers::conv_fld_from_array(array, name, "pointer", pointer, 0);
1269 Helpers::conv_fld_from_array(array, name, "size", size, 1);
1270 } else {
1271 throw_or_abort("expected MAP or ARRAY for " + name);
1272 }
1273 }
1274};
1275
1277
1280
1281 friend bool operator==(const MemoryAddress&, const MemoryAddress&);
1282
1283 void msgpack_unpack(msgpack::object const& o)
1284 {
1285 try {
1286 o.convert(value);
1287 } catch (const msgpack::type_error&) {
1288 std::cerr << o << std::endl;
1289 throw_or_abort("error converting into newtype 'MemoryAddress'");
1290 }
1291 }
1292 };
1293
1294 struct HeapArray {
1296
1297 friend bool operator==(const HeapArray&, const HeapArray&);
1298
1299 void msgpack_unpack(msgpack::object const& o)
1300 {
1301 try {
1302 o.convert(value);
1303 } catch (const msgpack::type_error&) {
1304 std::cerr << o << std::endl;
1305 throw_or_abort("error converting into newtype 'HeapArray'");
1306 }
1307 }
1308 };
1309
1310 struct HeapVector {
1312
1313 friend bool operator==(const HeapVector&, const HeapVector&);
1314
1315 void msgpack_unpack(msgpack::object const& o)
1316 {
1317 try {
1318 o.convert(value);
1319 } catch (const msgpack::type_error&) {
1320 std::cerr << o << std::endl;
1321 throw_or_abort("error converting into newtype 'HeapVector'");
1322 }
1323 }
1324 };
1325
1327
1328 friend bool operator==(const ValueOrArray&, const ValueOrArray&);
1329
1330 void msgpack_unpack(msgpack::object const& o)
1331 {
1332
1333 if (o.type != msgpack::type::object_type::MAP && o.type != msgpack::type::object_type::STR) {
1334 std::cerr << o << std::endl;
1335 throw_or_abort("expected MAP or STR for enum 'ValueOrArray'; got type " + std::to_string(o.type));
1336 }
1337 if (o.type == msgpack::type::object_type::MAP && o.via.map.size != 1) {
1338 throw_or_abort("expected 1 entry for enum 'ValueOrArray'; got " + std::to_string(o.via.map.size));
1339 }
1340 std::string tag;
1341 try {
1342 if (o.type == msgpack::type::object_type::MAP) {
1343 o.via.map.ptr[0].key.convert(tag);
1344 } else {
1345 o.convert(tag);
1346 }
1347 } catch (const msgpack::type_error&) {
1348 std::cerr << o << std::endl;
1349 throw_or_abort("error converting tag to string for enum 'ValueOrArray'");
1350 }
1351 if (tag == "MemoryAddress") {
1352 MemoryAddress v;
1353 if (o.type != msgpack::type::MAP) {
1354 throw_or_abort("expected MAP for enum variant, got STR (unit variant syntax for non-unit variant)");
1355 }
1356 try {
1357 o.via.map.ptr[0].val.convert(v);
1358 } catch (const msgpack::type_error&) {
1359 std::cerr << o << std::endl;
1360 throw_or_abort("error converting into enum variant 'ValueOrArray::MemoryAddress'");
1361 }
1362
1363 value = v;
1364 } else if (tag == "HeapArray") {
1365 HeapArray v;
1366 if (o.type != msgpack::type::MAP) {
1367 throw_or_abort("expected MAP for enum variant, got STR (unit variant syntax for non-unit variant)");
1368 }
1369 try {
1370 o.via.map.ptr[0].val.convert(v);
1371 } catch (const msgpack::type_error&) {
1372 std::cerr << o << std::endl;
1373 throw_or_abort("error converting into enum variant 'ValueOrArray::HeapArray'");
1374 }
1375
1376 value = v;
1377 } else if (tag == "HeapVector") {
1378 HeapVector v;
1379 if (o.type != msgpack::type::MAP) {
1380 throw_or_abort("expected MAP for enum variant, got STR (unit variant syntax for non-unit variant)");
1381 }
1382 try {
1383 o.via.map.ptr[0].val.convert(v);
1384 } catch (const msgpack::type_error&) {
1385 std::cerr << o << std::endl;
1386 throw_or_abort("error converting into enum variant 'ValueOrArray::HeapVector'");
1387 }
1388
1389 value = v;
1390 } else {
1391 std::cerr << o << std::endl;
1392 throw_or_abort("unknown 'ValueOrArray' enum variant: " + tag);
1393 }
1394 }
1395};
1396
1398
1404
1405 friend bool operator==(const BinaryFieldOp&, const BinaryFieldOp&);
1406
1407 void msgpack_unpack(msgpack::object const& o)
1408 {
1409 std::string name = "BinaryFieldOp";
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, "op", op, false);
1414 Helpers::conv_fld_from_kvmap(kvmap, name, "lhs", lhs, false);
1415 Helpers::conv_fld_from_kvmap(kvmap, name, "rhs", rhs, false);
1416 } else if (o.type == msgpack::type::ARRAY) {
1417 auto array = o.via.array;
1418 Helpers::conv_fld_from_array(array, name, "destination", destination, 0);
1419 Helpers::conv_fld_from_array(array, name, "op", op, 1);
1420 Helpers::conv_fld_from_array(array, name, "lhs", lhs, 2);
1421 Helpers::conv_fld_from_array(array, name, "rhs", rhs, 3);
1422 } else {
1423 throw_or_abort("expected MAP or ARRAY for " + name);
1424 }
1425 }
1426 };
1427
1434
1435 friend bool operator==(const BinaryIntOp&, const BinaryIntOp&);
1436
1437 void msgpack_unpack(msgpack::object const& o)
1438 {
1439 std::string name = "BinaryIntOp";
1440 if (o.type == msgpack::type::MAP) {
1441 auto kvmap = Helpers::make_kvmap(o, name);
1442 Helpers::conv_fld_from_kvmap(kvmap, name, "destination", destination, false);
1443 Helpers::conv_fld_from_kvmap(kvmap, name, "op", op, false);
1444 Helpers::conv_fld_from_kvmap(kvmap, name, "bit_size", bit_size, false);
1445 Helpers::conv_fld_from_kvmap(kvmap, name, "lhs", lhs, false);
1446 Helpers::conv_fld_from_kvmap(kvmap, name, "rhs", rhs, false);
1447 } else if (o.type == msgpack::type::ARRAY) {
1448 auto array = o.via.array;
1449 Helpers::conv_fld_from_array(array, name, "destination", destination, 0);
1450 Helpers::conv_fld_from_array(array, name, "op", op, 1);
1451 Helpers::conv_fld_from_array(array, name, "bit_size", bit_size, 2);
1452 Helpers::conv_fld_from_array(array, name, "lhs", lhs, 3);
1453 Helpers::conv_fld_from_array(array, name, "rhs", rhs, 4);
1454 } else {
1455 throw_or_abort("expected MAP or ARRAY for " + name);
1456 }
1457 }
1458 };
1459
1460 struct Not {
1464
1465 friend bool operator==(const Not&, const Not&);
1466
1467 void msgpack_unpack(msgpack::object const& o)
1468 {
1469 std::string name = "Not";
1470 if (o.type == msgpack::type::MAP) {
1471 auto kvmap = Helpers::make_kvmap(o, name);
1472 Helpers::conv_fld_from_kvmap(kvmap, name, "destination", destination, false);
1473 Helpers::conv_fld_from_kvmap(kvmap, name, "source", source, false);
1474 Helpers::conv_fld_from_kvmap(kvmap, name, "bit_size", bit_size, false);
1475 } else if (o.type == msgpack::type::ARRAY) {
1476 auto array = o.via.array;
1477 Helpers::conv_fld_from_array(array, name, "destination", destination, 0);
1478 Helpers::conv_fld_from_array(array, name, "source", source, 1);
1479 Helpers::conv_fld_from_array(array, name, "bit_size", bit_size, 2);
1480 } else {
1481 throw_or_abort("expected MAP or ARRAY for " + name);
1482 }
1483 }
1484 };
1485
1486 struct Cast {
1490
1491 friend bool operator==(const Cast&, const Cast&);
1492
1493 void msgpack_unpack(msgpack::object const& o)
1494 {
1495 std::string name = "Cast";
1496 if (o.type == msgpack::type::MAP) {
1497 auto kvmap = Helpers::make_kvmap(o, name);
1498 Helpers::conv_fld_from_kvmap(kvmap, name, "destination", destination, false);
1499 Helpers::conv_fld_from_kvmap(kvmap, name, "source", source, false);
1500 Helpers::conv_fld_from_kvmap(kvmap, name, "bit_size", bit_size, false);
1501 } else if (o.type == msgpack::type::ARRAY) {
1502 auto array = o.via.array;
1503 Helpers::conv_fld_from_array(array, name, "destination", destination, 0);
1504 Helpers::conv_fld_from_array(array, name, "source", source, 1);
1505 Helpers::conv_fld_from_array(array, name, "bit_size", bit_size, 2);
1506 } else {
1507 throw_or_abort("expected MAP or ARRAY for " + name);
1508 }
1509 }
1510 };
1511
1512 struct JumpIf {
1514 uint64_t location;
1515
1516 friend bool operator==(const JumpIf&, const JumpIf&);
1517
1518 void msgpack_unpack(msgpack::object const& o)
1519 {
1520 std::string name = "JumpIf";
1521 if (o.type == msgpack::type::MAP) {
1522 auto kvmap = Helpers::make_kvmap(o, name);
1523 Helpers::conv_fld_from_kvmap(kvmap, name, "condition", condition, false);
1524 Helpers::conv_fld_from_kvmap(kvmap, name, "location", location, false);
1525 } else if (o.type == msgpack::type::ARRAY) {
1526 auto array = o.via.array;
1527 Helpers::conv_fld_from_array(array, name, "condition", condition, 0);
1528 Helpers::conv_fld_from_array(array, name, "location", location, 1);
1529 } else {
1530 throw_or_abort("expected MAP or ARRAY for " + name);
1531 }
1532 }
1533 };
1534
1535 struct Jump {
1536 uint64_t location;
1537
1538 friend bool operator==(const Jump&, const Jump&);
1539
1540 void msgpack_unpack(msgpack::object const& o)
1541 {
1542 std::string name = "Jump";
1543 if (o.type == msgpack::type::MAP) {
1544 auto kvmap = Helpers::make_kvmap(o, name);
1545 Helpers::conv_fld_from_kvmap(kvmap, name, "location", location, false);
1546 } else if (o.type == msgpack::type::ARRAY) {
1547 auto array = o.via.array;
1548 Helpers::conv_fld_from_array(array, name, "location", location, 0);
1549 } else {
1550 throw_or_abort("expected MAP or ARRAY for " + name);
1551 }
1552 }
1553 };
1554
1559
1560 friend bool operator==(const CalldataCopy&, const CalldataCopy&);
1561
1562 void msgpack_unpack(msgpack::object const& o)
1563 {
1564 std::string name = "CalldataCopy";
1565 if (o.type == msgpack::type::MAP) {
1566 auto kvmap = Helpers::make_kvmap(o, name);
1567 Helpers::conv_fld_from_kvmap(kvmap, name, "destination_address", destination_address, false);
1568 Helpers::conv_fld_from_kvmap(kvmap, name, "size_address", size_address, false);
1569 Helpers::conv_fld_from_kvmap(kvmap, name, "offset_address", offset_address, false);
1570 } else if (o.type == msgpack::type::ARRAY) {
1571 auto array = o.via.array;
1572 Helpers::conv_fld_from_array(array, name, "destination_address", destination_address, 0);
1573 Helpers::conv_fld_from_array(array, name, "size_address", size_address, 1);
1574 Helpers::conv_fld_from_array(array, name, "offset_address", offset_address, 2);
1575 } else {
1576 throw_or_abort("expected MAP or ARRAY for " + name);
1577 }
1578 }
1579 };
1580
1581 struct Call {
1582 uint64_t location;
1583
1584 friend bool operator==(const Call&, const Call&);
1585
1586 void msgpack_unpack(msgpack::object const& o)
1587 {
1588 std::string name = "Call";
1589 if (o.type == msgpack::type::MAP) {
1590 auto kvmap = Helpers::make_kvmap(o, name);
1591 Helpers::conv_fld_from_kvmap(kvmap, name, "location", location, false);
1592 } else if (o.type == msgpack::type::ARRAY) {
1593 auto array = o.via.array;
1594 Helpers::conv_fld_from_array(array, name, "location", location, 0);
1595 } else {
1596 throw_or_abort("expected MAP or ARRAY for " + name);
1597 }
1598 }
1599 };
1600
1601 struct Const {
1604 std::vector<uint8_t> value;
1605
1606 friend bool operator==(const Const&, const Const&);
1607
1608 void msgpack_unpack(msgpack::object const& o)
1609 {
1610 std::string name = "Const";
1611 if (o.type == msgpack::type::MAP) {
1612 auto kvmap = Helpers::make_kvmap(o, name);
1613 Helpers::conv_fld_from_kvmap(kvmap, name, "destination", destination, false);
1614 Helpers::conv_fld_from_kvmap(kvmap, name, "bit_size", bit_size, false);
1615 Helpers::conv_fld_from_kvmap(kvmap, name, "value", value, false);
1616 } else if (o.type == msgpack::type::ARRAY) {
1617 auto array = o.via.array;
1618 Helpers::conv_fld_from_array(array, name, "destination", destination, 0);
1619 Helpers::conv_fld_from_array(array, name, "bit_size", bit_size, 1);
1620 Helpers::conv_fld_from_array(array, name, "value", value, 2);
1621 } else {
1622 throw_or_abort("expected MAP or ARRAY for " + name);
1623 }
1624 }
1625 };
1626
1630 std::vector<uint8_t> value;
1631
1632 friend bool operator==(const IndirectConst&, const IndirectConst&);
1633
1634 void msgpack_unpack(msgpack::object const& o)
1635 {
1636 std::string name = "IndirectConst";
1637 if (o.type == msgpack::type::MAP) {
1638 auto kvmap = Helpers::make_kvmap(o, name);
1639 Helpers::conv_fld_from_kvmap(kvmap, name, "destination_pointer", destination_pointer, false);
1640 Helpers::conv_fld_from_kvmap(kvmap, name, "bit_size", bit_size, false);
1641 Helpers::conv_fld_from_kvmap(kvmap, name, "value", value, false);
1642 } else if (o.type == msgpack::type::ARRAY) {
1643 auto array = o.via.array;
1644 Helpers::conv_fld_from_array(array, name, "destination_pointer", destination_pointer, 0);
1645 Helpers::conv_fld_from_array(array, name, "bit_size", bit_size, 1);
1646 Helpers::conv_fld_from_array(array, name, "value", value, 2);
1647 } else {
1648 throw_or_abort("expected MAP or ARRAY for " + name);
1649 }
1650 }
1651 };
1652
1653 struct Return {
1654 friend bool operator==(const Return&, const Return&);
1655
1656 void msgpack_unpack(msgpack::object const& o) {}
1657 };
1658
1660 std::string function;
1661 std::vector<Acir::ValueOrArray> destinations;
1662 std::vector<Acir::HeapValueType> destination_value_types;
1663 std::vector<Acir::ValueOrArray> inputs;
1664 std::vector<Acir::HeapValueType> input_value_types;
1665
1666 friend bool operator==(const ForeignCall&, const ForeignCall&);
1667
1668 void msgpack_unpack(msgpack::object const& o)
1669 {
1670 std::string name = "ForeignCall";
1671 if (o.type == msgpack::type::MAP) {
1672 auto kvmap = Helpers::make_kvmap(o, name);
1673 Helpers::conv_fld_from_kvmap(kvmap, name, "function", function, false);
1674 Helpers::conv_fld_from_kvmap(kvmap, name, "destinations", destinations, false);
1675 Helpers::conv_fld_from_kvmap(kvmap, name, "destination_value_types", destination_value_types, false);
1676 Helpers::conv_fld_from_kvmap(kvmap, name, "inputs", inputs, false);
1677 Helpers::conv_fld_from_kvmap(kvmap, name, "input_value_types", input_value_types, false);
1678 } else if (o.type == msgpack::type::ARRAY) {
1679 auto array = o.via.array;
1680 Helpers::conv_fld_from_array(array, name, "function", function, 0);
1681 Helpers::conv_fld_from_array(array, name, "destinations", destinations, 1);
1682 Helpers::conv_fld_from_array(array, name, "destination_value_types", destination_value_types, 2);
1683 Helpers::conv_fld_from_array(array, name, "inputs", inputs, 3);
1684 Helpers::conv_fld_from_array(array, name, "input_value_types", input_value_types, 4);
1685 } else {
1686 throw_or_abort("expected MAP or ARRAY for " + name);
1687 }
1688 }
1689 };
1690
1691 struct Mov {
1694
1695 friend bool operator==(const Mov&, const Mov&);
1696
1697 void msgpack_unpack(msgpack::object const& o)
1698 {
1699 std::string name = "Mov";
1700 if (o.type == msgpack::type::MAP) {
1701 auto kvmap = Helpers::make_kvmap(o, name);
1702 Helpers::conv_fld_from_kvmap(kvmap, name, "destination", destination, false);
1703 Helpers::conv_fld_from_kvmap(kvmap, name, "source", source, false);
1704 } else if (o.type == msgpack::type::ARRAY) {
1705 auto array = o.via.array;
1706 Helpers::conv_fld_from_array(array, name, "destination", destination, 0);
1707 Helpers::conv_fld_from_array(array, name, "source", source, 1);
1708 } else {
1709 throw_or_abort("expected MAP or ARRAY for " + name);
1710 }
1711 }
1712 };
1713
1719
1720 friend bool operator==(const ConditionalMov&, const ConditionalMov&);
1721
1722 void msgpack_unpack(msgpack::object const& o)
1723 {
1724 std::string name = "ConditionalMov";
1725 if (o.type == msgpack::type::MAP) {
1726 auto kvmap = Helpers::make_kvmap(o, name);
1727 Helpers::conv_fld_from_kvmap(kvmap, name, "destination", destination, false);
1728 Helpers::conv_fld_from_kvmap(kvmap, name, "source_a", source_a, false);
1729 Helpers::conv_fld_from_kvmap(kvmap, name, "source_b", source_b, false);
1730 Helpers::conv_fld_from_kvmap(kvmap, name, "condition", condition, false);
1731 } else if (o.type == msgpack::type::ARRAY) {
1732 auto array = o.via.array;
1733 Helpers::conv_fld_from_array(array, name, "destination", destination, 0);
1734 Helpers::conv_fld_from_array(array, name, "source_a", source_a, 1);
1735 Helpers::conv_fld_from_array(array, name, "source_b", source_b, 2);
1736 Helpers::conv_fld_from_array(array, name, "condition", condition, 3);
1737 } else {
1738 throw_or_abort("expected MAP or ARRAY for " + name);
1739 }
1740 }
1741 };
1742
1743 struct Load {
1746
1747 friend bool operator==(const Load&, const Load&);
1748
1749 void msgpack_unpack(msgpack::object const& o)
1750 {
1751 std::string name = "Load";
1752 if (o.type == msgpack::type::MAP) {
1753 auto kvmap = Helpers::make_kvmap(o, name);
1754 Helpers::conv_fld_from_kvmap(kvmap, name, "destination", destination, false);
1755 Helpers::conv_fld_from_kvmap(kvmap, name, "source_pointer", source_pointer, false);
1756 } else if (o.type == msgpack::type::ARRAY) {
1757 auto array = o.via.array;
1758 Helpers::conv_fld_from_array(array, name, "destination", destination, 0);
1759 Helpers::conv_fld_from_array(array, name, "source_pointer", source_pointer, 1);
1760 } else {
1761 throw_or_abort("expected MAP or ARRAY for " + name);
1762 }
1763 }
1764 };
1765
1766 struct Store {
1769
1770 friend bool operator==(const Store&, const Store&);
1771
1772 void msgpack_unpack(msgpack::object const& o)
1773 {
1774 std::string name = "Store";
1775 if (o.type == msgpack::type::MAP) {
1776 auto kvmap = Helpers::make_kvmap(o, name);
1777 Helpers::conv_fld_from_kvmap(kvmap, name, "destination_pointer", destination_pointer, false);
1778 Helpers::conv_fld_from_kvmap(kvmap, name, "source", source, false);
1779 } else if (o.type == msgpack::type::ARRAY) {
1780 auto array = o.via.array;
1781 Helpers::conv_fld_from_array(array, name, "destination_pointer", destination_pointer, 0);
1782 Helpers::conv_fld_from_array(array, name, "source", source, 1);
1783 } else {
1784 throw_or_abort("expected MAP or ARRAY for " + name);
1785 }
1786 }
1787 };
1788
1789 struct BlackBox {
1791
1792 friend bool operator==(const BlackBox&, const BlackBox&);
1793
1794 void msgpack_unpack(msgpack::object const& o)
1795 {
1796 try {
1797 o.convert(value);
1798 } catch (const msgpack::type_error&) {
1799 std::cerr << o << std::endl;
1800 throw_or_abort("error converting into newtype 'BlackBox'");
1801 }
1802 }
1803 };
1804
1805 struct Trap {
1807
1808 friend bool operator==(const Trap&, const Trap&);
1809
1810 void msgpack_unpack(msgpack::object const& o)
1811 {
1812 std::string name = "Trap";
1813 if (o.type == msgpack::type::MAP) {
1814 auto kvmap = Helpers::make_kvmap(o, name);
1815 Helpers::conv_fld_from_kvmap(kvmap, name, "revert_data", revert_data, false);
1816 } else if (o.type == msgpack::type::ARRAY) {
1817 auto array = o.via.array;
1818 Helpers::conv_fld_from_array(array, name, "revert_data", revert_data, 0);
1819 } else {
1820 throw_or_abort("expected MAP or ARRAY for " + name);
1821 }
1822 }
1823 };
1824
1825 struct Stop {
1827
1828 friend bool operator==(const Stop&, const Stop&);
1829
1830 void msgpack_unpack(msgpack::object const& o)
1831 {
1832 std::string name = "Stop";
1833 if (o.type == msgpack::type::MAP) {
1834 auto kvmap = Helpers::make_kvmap(o, name);
1835 Helpers::conv_fld_from_kvmap(kvmap, name, "return_data", return_data, false);
1836 } else if (o.type == msgpack::type::ARRAY) {
1837 auto array = o.via.array;
1838 Helpers::conv_fld_from_array(array, name, "return_data", return_data, 0);
1839 } else {
1840 throw_or_abort("expected MAP or ARRAY for " + name);
1841 }
1842 }
1843 };
1844
1847 Not,
1848 Cast,
1849 JumpIf,
1850 Jump,
1851 CalldataCopy,
1852 Call,
1853 Const,
1854 IndirectConst,
1855 Return,
1856 ForeignCall,
1857 Mov,
1858 ConditionalMov,
1859 Load,
1860 Store,
1861 BlackBox,
1862 Trap,
1863 Stop>
1865
1866 friend bool operator==(const BrilligOpcode&, const BrilligOpcode&);
1867
1868 void msgpack_unpack(msgpack::object const& o)
1869 {
1870
1871 if (o.type != msgpack::type::object_type::MAP && o.type != msgpack::type::object_type::STR) {
1872 std::cerr << o << std::endl;
1873 throw_or_abort("expected MAP or STR for enum 'BrilligOpcode'; got type " + std::to_string(o.type));
1874 }
1875 if (o.type == msgpack::type::object_type::MAP && o.via.map.size != 1) {
1876 throw_or_abort("expected 1 entry for enum 'BrilligOpcode'; got " + std::to_string(o.via.map.size));
1877 }
1878 std::string tag;
1879 try {
1880 if (o.type == msgpack::type::object_type::MAP) {
1881 o.via.map.ptr[0].key.convert(tag);
1882 } else {
1883 o.convert(tag);
1884 }
1885 } catch (const msgpack::type_error&) {
1886 std::cerr << o << std::endl;
1887 throw_or_abort("error converting tag to string for enum 'BrilligOpcode'");
1888 }
1889 if (tag == "BinaryFieldOp") {
1890 BinaryFieldOp v;
1891 if (o.type != msgpack::type::MAP) {
1892 throw_or_abort("expected MAP for enum variant, got STR (unit variant syntax for non-unit variant)");
1893 }
1894 try {
1895 o.via.map.ptr[0].val.convert(v);
1896 } catch (const msgpack::type_error&) {
1897 std::cerr << o << std::endl;
1898 throw_or_abort("error converting into enum variant 'BrilligOpcode::BinaryFieldOp'");
1899 }
1900
1901 value = v;
1902 } else if (tag == "BinaryIntOp") {
1903 BinaryIntOp v;
1904 if (o.type != msgpack::type::MAP) {
1905 throw_or_abort("expected MAP for enum variant, got STR (unit variant syntax for non-unit variant)");
1906 }
1907 try {
1908 o.via.map.ptr[0].val.convert(v);
1909 } catch (const msgpack::type_error&) {
1910 std::cerr << o << std::endl;
1911 throw_or_abort("error converting into enum variant 'BrilligOpcode::BinaryIntOp'");
1912 }
1913
1914 value = v;
1915 } else if (tag == "Not") {
1916 Not v;
1917 if (o.type != msgpack::type::MAP) {
1918 throw_or_abort("expected MAP for enum variant, got STR (unit variant syntax for non-unit variant)");
1919 }
1920 try {
1921 o.via.map.ptr[0].val.convert(v);
1922 } catch (const msgpack::type_error&) {
1923 std::cerr << o << std::endl;
1924 throw_or_abort("error converting into enum variant 'BrilligOpcode::Not'");
1925 }
1926
1927 value = v;
1928 } else if (tag == "Cast") {
1929 Cast v;
1930 if (o.type != msgpack::type::MAP) {
1931 throw_or_abort("expected MAP for enum variant, got STR (unit variant syntax for non-unit variant)");
1932 }
1933 try {
1934 o.via.map.ptr[0].val.convert(v);
1935 } catch (const msgpack::type_error&) {
1936 std::cerr << o << std::endl;
1937 throw_or_abort("error converting into enum variant 'BrilligOpcode::Cast'");
1938 }
1939
1940 value = v;
1941 } else if (tag == "JumpIf") {
1942 JumpIf v;
1943 if (o.type != msgpack::type::MAP) {
1944 throw_or_abort("expected MAP for enum variant, got STR (unit variant syntax for non-unit variant)");
1945 }
1946 try {
1947 o.via.map.ptr[0].val.convert(v);
1948 } catch (const msgpack::type_error&) {
1949 std::cerr << o << std::endl;
1950 throw_or_abort("error converting into enum variant 'BrilligOpcode::JumpIf'");
1951 }
1952
1953 value = v;
1954 } else if (tag == "Jump") {
1955 Jump v;
1956 if (o.type != msgpack::type::MAP) {
1957 throw_or_abort("expected MAP for enum variant, got STR (unit variant syntax for non-unit variant)");
1958 }
1959 try {
1960 o.via.map.ptr[0].val.convert(v);
1961 } catch (const msgpack::type_error&) {
1962 std::cerr << o << std::endl;
1963 throw_or_abort("error converting into enum variant 'BrilligOpcode::Jump'");
1964 }
1965
1966 value = v;
1967 } else if (tag == "CalldataCopy") {
1968 CalldataCopy v;
1969 if (o.type != msgpack::type::MAP) {
1970 throw_or_abort("expected MAP for enum variant, got STR (unit variant syntax for non-unit variant)");
1971 }
1972 try {
1973 o.via.map.ptr[0].val.convert(v);
1974 } catch (const msgpack::type_error&) {
1975 std::cerr << o << std::endl;
1976 throw_or_abort("error converting into enum variant 'BrilligOpcode::CalldataCopy'");
1977 }
1978
1979 value = v;
1980 } else if (tag == "Call") {
1981 Call v;
1982 if (o.type != msgpack::type::MAP) {
1983 throw_or_abort("expected MAP for enum variant, got STR (unit variant syntax for non-unit variant)");
1984 }
1985 try {
1986 o.via.map.ptr[0].val.convert(v);
1987 } catch (const msgpack::type_error&) {
1988 std::cerr << o << std::endl;
1989 throw_or_abort("error converting into enum variant 'BrilligOpcode::Call'");
1990 }
1991
1992 value = v;
1993 } else if (tag == "Const") {
1994 Const v;
1995 if (o.type != msgpack::type::MAP) {
1996 throw_or_abort("expected MAP for enum variant, got STR (unit variant syntax for non-unit variant)");
1997 }
1998 try {
1999 o.via.map.ptr[0].val.convert(v);
2000 } catch (const msgpack::type_error&) {
2001 std::cerr << o << std::endl;
2002 throw_or_abort("error converting into enum variant 'BrilligOpcode::Const'");
2003 }
2004
2005 value = v;
2006 } else if (tag == "IndirectConst") {
2007 IndirectConst v;
2008 if (o.type != msgpack::type::MAP) {
2009 throw_or_abort("expected MAP for enum variant, got STR (unit variant syntax for non-unit variant)");
2010 }
2011 try {
2012 o.via.map.ptr[0].val.convert(v);
2013 } catch (const msgpack::type_error&) {
2014 std::cerr << o << std::endl;
2015 throw_or_abort("error converting into enum variant 'BrilligOpcode::IndirectConst'");
2016 }
2017
2018 value = v;
2019 } else if (tag == "Return") {
2020 Return v;
2021 value = v;
2022 } else if (tag == "ForeignCall") {
2023 ForeignCall v;
2024 if (o.type != msgpack::type::MAP) {
2025 throw_or_abort("expected MAP for enum variant, got STR (unit variant syntax for non-unit variant)");
2026 }
2027 try {
2028 o.via.map.ptr[0].val.convert(v);
2029 } catch (const msgpack::type_error&) {
2030 std::cerr << o << std::endl;
2031 throw_or_abort("error converting into enum variant 'BrilligOpcode::ForeignCall'");
2032 }
2033
2034 value = v;
2035 } else if (tag == "Mov") {
2036 Mov v;
2037 if (o.type != msgpack::type::MAP) {
2038 throw_or_abort("expected MAP for enum variant, got STR (unit variant syntax for non-unit variant)");
2039 }
2040 try {
2041 o.via.map.ptr[0].val.convert(v);
2042 } catch (const msgpack::type_error&) {
2043 std::cerr << o << std::endl;
2044 throw_or_abort("error converting into enum variant 'BrilligOpcode::Mov'");
2045 }
2046
2047 value = v;
2048 } else if (tag == "ConditionalMov") {
2050 if (o.type != msgpack::type::MAP) {
2051 throw_or_abort("expected MAP for enum variant, got STR (unit variant syntax for non-unit variant)");
2052 }
2053 try {
2054 o.via.map.ptr[0].val.convert(v);
2055 } catch (const msgpack::type_error&) {
2056 std::cerr << o << std::endl;
2057 throw_or_abort("error converting into enum variant 'BrilligOpcode::ConditionalMov'");
2058 }
2059
2060 value = v;
2061 } else if (tag == "Load") {
2062 Load v;
2063 if (o.type != msgpack::type::MAP) {
2064 throw_or_abort("expected MAP for enum variant, got STR (unit variant syntax for non-unit variant)");
2065 }
2066 try {
2067 o.via.map.ptr[0].val.convert(v);
2068 } catch (const msgpack::type_error&) {
2069 std::cerr << o << std::endl;
2070 throw_or_abort("error converting into enum variant 'BrilligOpcode::Load'");
2071 }
2072
2073 value = v;
2074 } else if (tag == "Store") {
2075 Store v;
2076 if (o.type != msgpack::type::MAP) {
2077 throw_or_abort("expected MAP for enum variant, got STR (unit variant syntax for non-unit variant)");
2078 }
2079 try {
2080 o.via.map.ptr[0].val.convert(v);
2081 } catch (const msgpack::type_error&) {
2082 std::cerr << o << std::endl;
2083 throw_or_abort("error converting into enum variant 'BrilligOpcode::Store'");
2084 }
2085
2086 value = v;
2087 } else if (tag == "BlackBox") {
2088 BlackBox v;
2089 if (o.type != msgpack::type::MAP) {
2090 throw_or_abort("expected MAP for enum variant, got STR (unit variant syntax for non-unit variant)");
2091 }
2092 try {
2093 o.via.map.ptr[0].val.convert(v);
2094 } catch (const msgpack::type_error&) {
2095 std::cerr << o << std::endl;
2096 throw_or_abort("error converting into enum variant 'BrilligOpcode::BlackBox'");
2097 }
2098
2099 value = v;
2100 } else if (tag == "Trap") {
2101 Trap v;
2102 if (o.type != msgpack::type::MAP) {
2103 throw_or_abort("expected MAP for enum variant, got STR (unit variant syntax for non-unit variant)");
2104 }
2105 try {
2106 o.via.map.ptr[0].val.convert(v);
2107 } catch (const msgpack::type_error&) {
2108 std::cerr << o << std::endl;
2109 throw_or_abort("error converting into enum variant 'BrilligOpcode::Trap'");
2110 }
2111
2112 value = v;
2113 } else if (tag == "Stop") {
2114 Stop v;
2115 if (o.type != msgpack::type::MAP) {
2116 throw_or_abort("expected MAP for enum variant, got STR (unit variant syntax for non-unit variant)");
2117 }
2118 try {
2119 o.via.map.ptr[0].val.convert(v);
2120 } catch (const msgpack::type_error&) {
2121 std::cerr << o << std::endl;
2122 throw_or_abort("error converting into enum variant 'BrilligOpcode::Stop'");
2123 }
2124
2125 value = v;
2126 } else {
2127 std::cerr << o << std::endl;
2128 throw_or_abort("unknown 'BrilligOpcode' enum variant: " + tag);
2129 }
2130 }
2131};
2132
2133struct Witness {
2134 uint32_t value;
2135
2136 friend bool operator==(const Witness&, const Witness&);
2137
2138 void msgpack_unpack(msgpack::object const& o)
2139 {
2140 try {
2141 o.convert(value);
2142 } catch (const msgpack::type_error&) {
2143 std::cerr << o << std::endl;
2144 throw_or_abort("error converting into newtype 'Witness'");
2145 }
2146 }
2147};
2148
2150
2151 struct Constant {
2152 std::vector<uint8_t> value;
2153
2154 friend bool operator==(const Constant&, const Constant&);
2155
2156 void msgpack_unpack(msgpack::object const& o)
2157 {
2158 try {
2159 o.convert(value);
2160 } catch (const msgpack::type_error&) {
2161 std::cerr << o << std::endl;
2162 throw_or_abort("error converting into newtype 'Constant'");
2163 }
2164 }
2165 };
2166
2167 struct Witness {
2169
2170 friend bool operator==(const Witness&, const Witness&);
2171
2172 void msgpack_unpack(msgpack::object const& o)
2173 {
2174 try {
2175 o.convert(value);
2176 } catch (const msgpack::type_error&) {
2177 std::cerr << o << std::endl;
2178 throw_or_abort("error converting into newtype 'Witness'");
2179 }
2180 }
2181 };
2182
2184
2185 friend bool operator==(const FunctionInput&, const FunctionInput&);
2186
2187 void msgpack_unpack(msgpack::object const& o)
2188 {
2189
2190 if (o.type != msgpack::type::object_type::MAP && o.type != msgpack::type::object_type::STR) {
2191 std::cerr << o << std::endl;
2192 throw_or_abort("expected MAP or STR for enum 'FunctionInput'; got type " + std::to_string(o.type));
2193 }
2194 if (o.type == msgpack::type::object_type::MAP && o.via.map.size != 1) {
2195 throw_or_abort("expected 1 entry for enum 'FunctionInput'; got " + std::to_string(o.via.map.size));
2196 }
2197 std::string tag;
2198 try {
2199 if (o.type == msgpack::type::object_type::MAP) {
2200 o.via.map.ptr[0].key.convert(tag);
2201 } else {
2202 o.convert(tag);
2203 }
2204 } catch (const msgpack::type_error&) {
2205 std::cerr << o << std::endl;
2206 throw_or_abort("error converting tag to string for enum 'FunctionInput'");
2207 }
2208 if (tag == "Constant") {
2209 Constant v;
2210 if (o.type != msgpack::type::MAP) {
2211 throw_or_abort("expected MAP for enum variant, got STR (unit variant syntax for non-unit variant)");
2212 }
2213 try {
2214 o.via.map.ptr[0].val.convert(v);
2215 } catch (const msgpack::type_error&) {
2216 std::cerr << o << std::endl;
2217 throw_or_abort("error converting into enum variant 'FunctionInput::Constant'");
2218 }
2219
2220 value = v;
2221 } else if (tag == "Witness") {
2222 Witness v;
2223 if (o.type != msgpack::type::MAP) {
2224 throw_or_abort("expected MAP for enum variant, got STR (unit variant syntax for non-unit variant)");
2225 }
2226 try {
2227 o.via.map.ptr[0].val.convert(v);
2228 } catch (const msgpack::type_error&) {
2229 std::cerr << o << std::endl;
2230 throw_or_abort("error converting into enum variant 'FunctionInput::Witness'");
2231 }
2232
2233 value = v;
2234 } else {
2235 std::cerr << o << std::endl;
2236 throw_or_abort("unknown 'FunctionInput' enum variant: " + tag);
2237 }
2238 }
2239};
2240
2242
2244 std::vector<Acir::FunctionInput> inputs;
2247 std::vector<Acir::Witness> outputs;
2248
2249 friend bool operator==(const AES128Encrypt&, const AES128Encrypt&);
2250
2251 void msgpack_unpack(msgpack::object const& o)
2252 {
2253 std::string name = "AES128Encrypt";
2254 if (o.type == msgpack::type::MAP) {
2255 auto kvmap = Helpers::make_kvmap(o, name);
2256 Helpers::conv_fld_from_kvmap(kvmap, name, "inputs", inputs, false);
2257 Helpers::conv_fld_from_kvmap(kvmap, name, "iv", iv, false);
2258 Helpers::conv_fld_from_kvmap(kvmap, name, "key", key, false);
2259 Helpers::conv_fld_from_kvmap(kvmap, name, "outputs", outputs, false);
2260 } else if (o.type == msgpack::type::ARRAY) {
2261 auto array = o.via.array;
2262 Helpers::conv_fld_from_array(array, name, "inputs", inputs, 0);
2263 Helpers::conv_fld_from_array(array, name, "iv", iv, 1);
2264 Helpers::conv_fld_from_array(array, name, "key", key, 2);
2265 Helpers::conv_fld_from_array(array, name, "outputs", outputs, 3);
2266 } else {
2267 throw_or_abort("expected MAP or ARRAY for " + name);
2268 }
2269 }
2270 };
2271
2272 struct AND {
2275 uint32_t num_bits;
2277
2278 friend bool operator==(const AND&, const AND&);
2279
2280 void msgpack_unpack(msgpack::object const& o)
2281 {
2282 std::string name = "AND";
2283 if (o.type == msgpack::type::MAP) {
2284 auto kvmap = Helpers::make_kvmap(o, name);
2285 Helpers::conv_fld_from_kvmap(kvmap, name, "lhs", lhs, false);
2286 Helpers::conv_fld_from_kvmap(kvmap, name, "rhs", rhs, false);
2287 Helpers::conv_fld_from_kvmap(kvmap, name, "num_bits", num_bits, false);
2288 Helpers::conv_fld_from_kvmap(kvmap, name, "output", output, false);
2289 } else if (o.type == msgpack::type::ARRAY) {
2290 auto array = o.via.array;
2291 Helpers::conv_fld_from_array(array, name, "lhs", lhs, 0);
2292 Helpers::conv_fld_from_array(array, name, "rhs", rhs, 1);
2293 Helpers::conv_fld_from_array(array, name, "num_bits", num_bits, 2);
2294 Helpers::conv_fld_from_array(array, name, "output", output, 3);
2295 } else {
2296 throw_or_abort("expected MAP or ARRAY for " + name);
2297 }
2298 }
2299 };
2300
2301 struct XOR {
2304 uint32_t num_bits;
2306
2307 friend bool operator==(const XOR&, const XOR&);
2308
2309 void msgpack_unpack(msgpack::object const& o)
2310 {
2311 std::string name = "XOR";
2312 if (o.type == msgpack::type::MAP) {
2313 auto kvmap = Helpers::make_kvmap(o, name);
2314 Helpers::conv_fld_from_kvmap(kvmap, name, "lhs", lhs, false);
2315 Helpers::conv_fld_from_kvmap(kvmap, name, "rhs", rhs, false);
2316 Helpers::conv_fld_from_kvmap(kvmap, name, "num_bits", num_bits, false);
2317 Helpers::conv_fld_from_kvmap(kvmap, name, "output", output, false);
2318 } else if (o.type == msgpack::type::ARRAY) {
2319 auto array = o.via.array;
2320 Helpers::conv_fld_from_array(array, name, "lhs", lhs, 0);
2321 Helpers::conv_fld_from_array(array, name, "rhs", rhs, 1);
2322 Helpers::conv_fld_from_array(array, name, "num_bits", num_bits, 2);
2323 Helpers::conv_fld_from_array(array, name, "output", output, 3);
2324 } else {
2325 throw_or_abort("expected MAP or ARRAY for " + name);
2326 }
2327 }
2328 };
2329
2330 struct RANGE {
2332 uint32_t num_bits;
2333
2334 friend bool operator==(const RANGE&, const RANGE&);
2335
2336 void msgpack_unpack(msgpack::object const& o)
2337 {
2338 std::string name = "RANGE";
2339 if (o.type == msgpack::type::MAP) {
2340 auto kvmap = Helpers::make_kvmap(o, name);
2341 Helpers::conv_fld_from_kvmap(kvmap, name, "input", input, false);
2342 Helpers::conv_fld_from_kvmap(kvmap, name, "num_bits", num_bits, false);
2343 } else if (o.type == msgpack::type::ARRAY) {
2344 auto array = o.via.array;
2345 Helpers::conv_fld_from_array(array, name, "input", input, 0);
2346 Helpers::conv_fld_from_array(array, name, "num_bits", num_bits, 1);
2347 } else {
2348 throw_or_abort("expected MAP or ARRAY for " + name);
2349 }
2350 }
2351 };
2352
2353 struct Blake2s {
2354 std::vector<Acir::FunctionInput> inputs;
2356
2357 friend bool operator==(const Blake2s&, const Blake2s&);
2358
2359 void msgpack_unpack(msgpack::object const& o)
2360 {
2361 std::string name = "Blake2s";
2362 if (o.type == msgpack::type::MAP) {
2363 auto kvmap = Helpers::make_kvmap(o, name);
2364 Helpers::conv_fld_from_kvmap(kvmap, name, "inputs", inputs, 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, "inputs", inputs, 0);
2369 Helpers::conv_fld_from_array(array, name, "outputs", outputs, 1);
2370 } else {
2371 throw_or_abort("expected MAP or ARRAY for " + name);
2372 }
2373 }
2374 };
2375
2376 struct Blake3 {
2377 std::vector<Acir::FunctionInput> inputs;
2379
2380 friend bool operator==(const Blake3&, const Blake3&);
2381
2382 void msgpack_unpack(msgpack::object const& o)
2383 {
2384 std::string name = "Blake3";
2385 if (o.type == msgpack::type::MAP) {
2386 auto kvmap = Helpers::make_kvmap(o, name);
2387 Helpers::conv_fld_from_kvmap(kvmap, name, "inputs", inputs, false);
2388 Helpers::conv_fld_from_kvmap(kvmap, name, "outputs", outputs, false);
2389 } else if (o.type == msgpack::type::ARRAY) {
2390 auto array = o.via.array;
2391 Helpers::conv_fld_from_array(array, name, "inputs", inputs, 0);
2392 Helpers::conv_fld_from_array(array, name, "outputs", outputs, 1);
2393 } else {
2394 throw_or_abort("expected MAP or ARRAY for " + name);
2395 }
2396 }
2397 };
2398
2406
2407 friend bool operator==(const EcdsaSecp256k1&, const EcdsaSecp256k1&);
2408
2409 void msgpack_unpack(msgpack::object const& o)
2410 {
2411 std::string name = "EcdsaSecp256k1";
2412 if (o.type == msgpack::type::MAP) {
2413 auto kvmap = Helpers::make_kvmap(o, name);
2414 Helpers::conv_fld_from_kvmap(kvmap, name, "public_key_x", public_key_x, false);
2415 Helpers::conv_fld_from_kvmap(kvmap, name, "public_key_y", public_key_y, false);
2416 Helpers::conv_fld_from_kvmap(kvmap, name, "signature", signature, false);
2417 Helpers::conv_fld_from_kvmap(kvmap, name, "hashed_message", hashed_message, false);
2418 Helpers::conv_fld_from_kvmap(kvmap, name, "predicate", predicate, false);
2419 Helpers::conv_fld_from_kvmap(kvmap, name, "output", output, false);
2420 } else if (o.type == msgpack::type::ARRAY) {
2421 auto array = o.via.array;
2422 Helpers::conv_fld_from_array(array, name, "public_key_x", public_key_x, 0);
2423 Helpers::conv_fld_from_array(array, name, "public_key_y", public_key_y, 1);
2424 Helpers::conv_fld_from_array(array, name, "signature", signature, 2);
2425 Helpers::conv_fld_from_array(array, name, "hashed_message", hashed_message, 3);
2426 Helpers::conv_fld_from_array(array, name, "predicate", predicate, 4);
2427 Helpers::conv_fld_from_array(array, name, "output", output, 5);
2428 } else {
2429 throw_or_abort("expected MAP or ARRAY for " + name);
2430 }
2431 }
2432 };
2433
2441
2442 friend bool operator==(const EcdsaSecp256r1&, const EcdsaSecp256r1&);
2443
2444 void msgpack_unpack(msgpack::object const& o)
2445 {
2446 std::string name = "EcdsaSecp256r1";
2447 if (o.type == msgpack::type::MAP) {
2448 auto kvmap = Helpers::make_kvmap(o, name);
2449 Helpers::conv_fld_from_kvmap(kvmap, name, "public_key_x", public_key_x, false);
2450 Helpers::conv_fld_from_kvmap(kvmap, name, "public_key_y", public_key_y, false);
2451 Helpers::conv_fld_from_kvmap(kvmap, name, "signature", signature, false);
2452 Helpers::conv_fld_from_kvmap(kvmap, name, "hashed_message", hashed_message, false);
2453 Helpers::conv_fld_from_kvmap(kvmap, name, "predicate", predicate, false);
2454 Helpers::conv_fld_from_kvmap(kvmap, name, "output", output, false);
2455 } else if (o.type == msgpack::type::ARRAY) {
2456 auto array = o.via.array;
2457 Helpers::conv_fld_from_array(array, name, "public_key_x", public_key_x, 0);
2458 Helpers::conv_fld_from_array(array, name, "public_key_y", public_key_y, 1);
2459 Helpers::conv_fld_from_array(array, name, "signature", signature, 2);
2460 Helpers::conv_fld_from_array(array, name, "hashed_message", hashed_message, 3);
2461 Helpers::conv_fld_from_array(array, name, "predicate", predicate, 4);
2462 Helpers::conv_fld_from_array(array, name, "output", output, 5);
2463 } else {
2464 throw_or_abort("expected MAP or ARRAY for " + name);
2465 }
2466 }
2467 };
2468
2470 std::vector<Acir::FunctionInput> points;
2471 std::vector<Acir::FunctionInput> scalars;
2474
2475 friend bool operator==(const MultiScalarMul&, const MultiScalarMul&);
2476
2477 void msgpack_unpack(msgpack::object const& o)
2478 {
2479 std::string name = "MultiScalarMul";
2480 if (o.type == msgpack::type::MAP) {
2481 auto kvmap = Helpers::make_kvmap(o, name);
2482 Helpers::conv_fld_from_kvmap(kvmap, name, "points", points, false);
2483 Helpers::conv_fld_from_kvmap(kvmap, name, "scalars", scalars, false);
2484 Helpers::conv_fld_from_kvmap(kvmap, name, "predicate", predicate, false);
2485 Helpers::conv_fld_from_kvmap(kvmap, name, "outputs", outputs, false);
2486 } else if (o.type == msgpack::type::ARRAY) {
2487 auto array = o.via.array;
2488 Helpers::conv_fld_from_array(array, name, "points", points, 0);
2489 Helpers::conv_fld_from_array(array, name, "scalars", scalars, 1);
2490 Helpers::conv_fld_from_array(array, name, "predicate", predicate, 2);
2491 Helpers::conv_fld_from_array(array, name, "outputs", outputs, 3);
2492 } else {
2493 throw_or_abort("expected MAP or ARRAY for " + name);
2494 }
2495 }
2496 };
2497
2503
2504 friend bool operator==(const EmbeddedCurveAdd&, const EmbeddedCurveAdd&);
2505
2506 void msgpack_unpack(msgpack::object const& o)
2507 {
2508 std::string name = "EmbeddedCurveAdd";
2509 if (o.type == msgpack::type::MAP) {
2510 auto kvmap = Helpers::make_kvmap(o, name);
2511 Helpers::conv_fld_from_kvmap(kvmap, name, "input1", input1, false);
2512 Helpers::conv_fld_from_kvmap(kvmap, name, "input2", input2, false);
2513 Helpers::conv_fld_from_kvmap(kvmap, name, "predicate", predicate, false);
2514 Helpers::conv_fld_from_kvmap(kvmap, name, "outputs", outputs, false);
2515 } else if (o.type == msgpack::type::ARRAY) {
2516 auto array = o.via.array;
2517 Helpers::conv_fld_from_array(array, name, "input1", input1, 0);
2518 Helpers::conv_fld_from_array(array, name, "input2", input2, 1);
2519 Helpers::conv_fld_from_array(array, name, "predicate", predicate, 2);
2520 Helpers::conv_fld_from_array(array, name, "outputs", outputs, 3);
2521 } else {
2522 throw_or_abort("expected MAP or ARRAY for " + name);
2523 }
2524 }
2525 };
2526
2530
2531 friend bool operator==(const Keccakf1600&, const Keccakf1600&);
2532
2533 void msgpack_unpack(msgpack::object const& o)
2534 {
2535 std::string name = "Keccakf1600";
2536 if (o.type == msgpack::type::MAP) {
2537 auto kvmap = Helpers::make_kvmap(o, name);
2538 Helpers::conv_fld_from_kvmap(kvmap, name, "inputs", inputs, false);
2539 Helpers::conv_fld_from_kvmap(kvmap, name, "outputs", outputs, false);
2540 } else if (o.type == msgpack::type::ARRAY) {
2541 auto array = o.via.array;
2542 Helpers::conv_fld_from_array(array, name, "inputs", inputs, 0);
2543 Helpers::conv_fld_from_array(array, name, "outputs", outputs, 1);
2544 } else {
2545 throw_or_abort("expected MAP or ARRAY for " + name);
2546 }
2547 }
2548 };
2549
2551 std::vector<Acir::FunctionInput> verification_key;
2552 std::vector<Acir::FunctionInput> proof;
2553 std::vector<Acir::FunctionInput> public_inputs;
2555 uint32_t proof_type;
2557
2558 friend bool operator==(const RecursiveAggregation&, const RecursiveAggregation&);
2559
2560 void msgpack_unpack(msgpack::object const& o)
2561 {
2562 std::string name = "RecursiveAggregation";
2563 if (o.type == msgpack::type::MAP) {
2564 auto kvmap = Helpers::make_kvmap(o, name);
2565 Helpers::conv_fld_from_kvmap(kvmap, name, "verification_key", verification_key, false);
2566 Helpers::conv_fld_from_kvmap(kvmap, name, "proof", proof, false);
2567 Helpers::conv_fld_from_kvmap(kvmap, name, "public_inputs", public_inputs, false);
2568 Helpers::conv_fld_from_kvmap(kvmap, name, "key_hash", key_hash, false);
2569 Helpers::conv_fld_from_kvmap(kvmap, name, "proof_type", proof_type, false);
2570 Helpers::conv_fld_from_kvmap(kvmap, name, "predicate", predicate, false);
2571 } else if (o.type == msgpack::type::ARRAY) {
2572 auto array = o.via.array;
2573 Helpers::conv_fld_from_array(array, name, "verification_key", verification_key, 0);
2574 Helpers::conv_fld_from_array(array, name, "proof", proof, 1);
2575 Helpers::conv_fld_from_array(array, name, "public_inputs", public_inputs, 2);
2576 Helpers::conv_fld_from_array(array, name, "key_hash", key_hash, 3);
2577 Helpers::conv_fld_from_array(array, name, "proof_type", proof_type, 4);
2578 Helpers::conv_fld_from_array(array, name, "predicate", predicate, 5);
2579 } else {
2580 throw_or_abort("expected MAP or ARRAY for " + name);
2581 }
2582 }
2583 };
2584
2586 std::vector<Acir::FunctionInput> inputs;
2587 std::vector<Acir::Witness> outputs;
2588
2589 friend bool operator==(const Poseidon2Permutation&, const Poseidon2Permutation&);
2590
2591 void msgpack_unpack(msgpack::object const& o)
2592 {
2593 std::string name = "Poseidon2Permutation";
2594 if (o.type == msgpack::type::MAP) {
2595 auto kvmap = Helpers::make_kvmap(o, name);
2596 Helpers::conv_fld_from_kvmap(kvmap, name, "inputs", inputs, false);
2597 Helpers::conv_fld_from_kvmap(kvmap, name, "outputs", outputs, false);
2598 } else if (o.type == msgpack::type::ARRAY) {
2599 auto array = o.via.array;
2600 Helpers::conv_fld_from_array(array, name, "inputs", inputs, 0);
2601 Helpers::conv_fld_from_array(array, name, "outputs", outputs, 1);
2602 } else {
2603 throw_or_abort("expected MAP or ARRAY for " + name);
2604 }
2605 }
2606 };
2607
2612
2613 friend bool operator==(const Sha256Compression&, const Sha256Compression&);
2614
2615 void msgpack_unpack(msgpack::object const& o)
2616 {
2617 std::string name = "Sha256Compression";
2618 if (o.type == msgpack::type::MAP) {
2619 auto kvmap = Helpers::make_kvmap(o, name);
2620 Helpers::conv_fld_from_kvmap(kvmap, name, "inputs", inputs, false);
2621 Helpers::conv_fld_from_kvmap(kvmap, name, "hash_values", hash_values, false);
2622 Helpers::conv_fld_from_kvmap(kvmap, name, "outputs", outputs, false);
2623 } else if (o.type == msgpack::type::ARRAY) {
2624 auto array = o.via.array;
2625 Helpers::conv_fld_from_array(array, name, "inputs", inputs, 0);
2626 Helpers::conv_fld_from_array(array, name, "hash_values", hash_values, 1);
2627 Helpers::conv_fld_from_array(array, name, "outputs", outputs, 2);
2628 } else {
2629 throw_or_abort("expected MAP or ARRAY for " + name);
2630 }
2631 }
2632 };
2633
2634 std::variant<AES128Encrypt,
2635 AND,
2636 XOR,
2637 RANGE,
2638 Blake2s,
2639 Blake3,
2640 EcdsaSecp256k1,
2641 EcdsaSecp256r1,
2642 MultiScalarMul,
2643 EmbeddedCurveAdd,
2644 Keccakf1600,
2645 RecursiveAggregation,
2646 Poseidon2Permutation,
2647 Sha256Compression>
2649
2650 friend bool operator==(const BlackBoxFuncCall&, const BlackBoxFuncCall&);
2651
2652 void msgpack_unpack(msgpack::object const& o)
2653 {
2654
2655 if (o.type != msgpack::type::object_type::MAP && o.type != msgpack::type::object_type::STR) {
2656 std::cerr << o << std::endl;
2657 throw_or_abort("expected MAP or STR for enum 'BlackBoxFuncCall'; got type " + std::to_string(o.type));
2658 }
2659 if (o.type == msgpack::type::object_type::MAP && o.via.map.size != 1) {
2660 throw_or_abort("expected 1 entry for enum 'BlackBoxFuncCall'; got " + std::to_string(o.via.map.size));
2661 }
2662 std::string tag;
2663 try {
2664 if (o.type == msgpack::type::object_type::MAP) {
2665 o.via.map.ptr[0].key.convert(tag);
2666 } else {
2667 o.convert(tag);
2668 }
2669 } catch (const msgpack::type_error&) {
2670 std::cerr << o << std::endl;
2671 throw_or_abort("error converting tag to string for enum 'BlackBoxFuncCall'");
2672 }
2673 if (tag == "AES128Encrypt") {
2674 AES128Encrypt v;
2675 if (o.type != msgpack::type::MAP) {
2676 throw_or_abort("expected MAP for enum variant, got STR (unit variant syntax for non-unit variant)");
2677 }
2678 try {
2679 o.via.map.ptr[0].val.convert(v);
2680 } catch (const msgpack::type_error&) {
2681 std::cerr << o << std::endl;
2682 throw_or_abort("error converting into enum variant 'BlackBoxFuncCall::AES128Encrypt'");
2683 }
2684
2685 value = v;
2686 } else if (tag == "AND") {
2687 AND v;
2688 if (o.type != msgpack::type::MAP) {
2689 throw_or_abort("expected MAP for enum variant, got STR (unit variant syntax for non-unit variant)");
2690 }
2691 try {
2692 o.via.map.ptr[0].val.convert(v);
2693 } catch (const msgpack::type_error&) {
2694 std::cerr << o << std::endl;
2695 throw_or_abort("error converting into enum variant 'BlackBoxFuncCall::AND'");
2696 }
2697
2698 value = v;
2699 } else if (tag == "XOR") {
2700 XOR v;
2701 if (o.type != msgpack::type::MAP) {
2702 throw_or_abort("expected MAP for enum variant, got STR (unit variant syntax for non-unit variant)");
2703 }
2704 try {
2705 o.via.map.ptr[0].val.convert(v);
2706 } catch (const msgpack::type_error&) {
2707 std::cerr << o << std::endl;
2708 throw_or_abort("error converting into enum variant 'BlackBoxFuncCall::XOR'");
2709 }
2710
2711 value = v;
2712 } else if (tag == "RANGE") {
2713 RANGE v;
2714 if (o.type != msgpack::type::MAP) {
2715 throw_or_abort("expected MAP for enum variant, got STR (unit variant syntax for non-unit variant)");
2716 }
2717 try {
2718 o.via.map.ptr[0].val.convert(v);
2719 } catch (const msgpack::type_error&) {
2720 std::cerr << o << std::endl;
2721 throw_or_abort("error converting into enum variant 'BlackBoxFuncCall::RANGE'");
2722 }
2723
2724 value = v;
2725 } else if (tag == "Blake2s") {
2726 Blake2s v;
2727 if (o.type != msgpack::type::MAP) {
2728 throw_or_abort("expected MAP for enum variant, got STR (unit variant syntax for non-unit variant)");
2729 }
2730 try {
2731 o.via.map.ptr[0].val.convert(v);
2732 } catch (const msgpack::type_error&) {
2733 std::cerr << o << std::endl;
2734 throw_or_abort("error converting into enum variant 'BlackBoxFuncCall::Blake2s'");
2735 }
2736
2737 value = v;
2738 } else if (tag == "Blake3") {
2739 Blake3 v;
2740 if (o.type != msgpack::type::MAP) {
2741 throw_or_abort("expected MAP for enum variant, got STR (unit variant syntax for non-unit variant)");
2742 }
2743 try {
2744 o.via.map.ptr[0].val.convert(v);
2745 } catch (const msgpack::type_error&) {
2746 std::cerr << o << std::endl;
2747 throw_or_abort("error converting into enum variant 'BlackBoxFuncCall::Blake3'");
2748 }
2749
2750 value = v;
2751 } else if (tag == "EcdsaSecp256k1") {
2753 if (o.type != msgpack::type::MAP) {
2754 throw_or_abort("expected MAP for enum variant, got STR (unit variant syntax for non-unit variant)");
2755 }
2756 try {
2757 o.via.map.ptr[0].val.convert(v);
2758 } catch (const msgpack::type_error&) {
2759 std::cerr << o << std::endl;
2760 throw_or_abort("error converting into enum variant 'BlackBoxFuncCall::EcdsaSecp256k1'");
2761 }
2762
2763 value = v;
2764 } else if (tag == "EcdsaSecp256r1") {
2766 if (o.type != msgpack::type::MAP) {
2767 throw_or_abort("expected MAP for enum variant, got STR (unit variant syntax for non-unit variant)");
2768 }
2769 try {
2770 o.via.map.ptr[0].val.convert(v);
2771 } catch (const msgpack::type_error&) {
2772 std::cerr << o << std::endl;
2773 throw_or_abort("error converting into enum variant 'BlackBoxFuncCall::EcdsaSecp256r1'");
2774 }
2775
2776 value = v;
2777 } else if (tag == "MultiScalarMul") {
2779 if (o.type != msgpack::type::MAP) {
2780 throw_or_abort("expected MAP for enum variant, got STR (unit variant syntax for non-unit variant)");
2781 }
2782 try {
2783 o.via.map.ptr[0].val.convert(v);
2784 } catch (const msgpack::type_error&) {
2785 std::cerr << o << std::endl;
2786 throw_or_abort("error converting into enum variant 'BlackBoxFuncCall::MultiScalarMul'");
2787 }
2788
2789 value = v;
2790 } else if (tag == "EmbeddedCurveAdd") {
2792 if (o.type != msgpack::type::MAP) {
2793 throw_or_abort("expected MAP for enum variant, got STR (unit variant syntax for non-unit variant)");
2794 }
2795 try {
2796 o.via.map.ptr[0].val.convert(v);
2797 } catch (const msgpack::type_error&) {
2798 std::cerr << o << std::endl;
2799 throw_or_abort("error converting into enum variant 'BlackBoxFuncCall::EmbeddedCurveAdd'");
2800 }
2801
2802 value = v;
2803 } else if (tag == "Keccakf1600") {
2804 Keccakf1600 v;
2805 if (o.type != msgpack::type::MAP) {
2806 throw_or_abort("expected MAP for enum variant, got STR (unit variant syntax for non-unit variant)");
2807 }
2808 try {
2809 o.via.map.ptr[0].val.convert(v);
2810 } catch (const msgpack::type_error&) {
2811 std::cerr << o << std::endl;
2812 throw_or_abort("error converting into enum variant 'BlackBoxFuncCall::Keccakf1600'");
2813 }
2814
2815 value = v;
2816 } else if (tag == "RecursiveAggregation") {
2818 if (o.type != msgpack::type::MAP) {
2819 throw_or_abort("expected MAP for enum variant, got STR (unit variant syntax for non-unit variant)");
2820 }
2821 try {
2822 o.via.map.ptr[0].val.convert(v);
2823 } catch (const msgpack::type_error&) {
2824 std::cerr << o << std::endl;
2825 throw_or_abort("error converting into enum variant 'BlackBoxFuncCall::RecursiveAggregation'");
2826 }
2827
2828 value = v;
2829 } else if (tag == "Poseidon2Permutation") {
2831 if (o.type != msgpack::type::MAP) {
2832 throw_or_abort("expected MAP for enum variant, got STR (unit variant syntax for non-unit variant)");
2833 }
2834 try {
2835 o.via.map.ptr[0].val.convert(v);
2836 } catch (const msgpack::type_error&) {
2837 std::cerr << o << std::endl;
2838 throw_or_abort("error converting into enum variant 'BlackBoxFuncCall::Poseidon2Permutation'");
2839 }
2840
2841 value = v;
2842 } else if (tag == "Sha256Compression") {
2844 if (o.type != msgpack::type::MAP) {
2845 throw_or_abort("expected MAP for enum variant, got STR (unit variant syntax for non-unit variant)");
2846 }
2847 try {
2848 o.via.map.ptr[0].val.convert(v);
2849 } catch (const msgpack::type_error&) {
2850 std::cerr << o << std::endl;
2851 throw_or_abort("error converting into enum variant 'BlackBoxFuncCall::Sha256Compression'");
2852 }
2853
2854 value = v;
2855 } else {
2856 std::cerr << o << std::endl;
2857 throw_or_abort("unknown 'BlackBoxFuncCall' enum variant: " + tag);
2858 }
2859 }
2860};
2861
2862struct BlockId {
2863 uint32_t value;
2864
2865 friend bool operator==(const BlockId&, const BlockId&);
2866
2867 void msgpack_unpack(msgpack::object const& o)
2868 {
2869 try {
2870 o.convert(value);
2871 } catch (const msgpack::type_error&) {
2872 std::cerr << o << std::endl;
2873 throw_or_abort("error converting into newtype 'BlockId'");
2874 }
2875 }
2876};
2877
2879
2880 struct Memory {
2881 friend bool operator==(const Memory&, const Memory&);
2882
2883 void msgpack_unpack(msgpack::object const& o) {}
2884 };
2885
2886 struct CallData {
2887 uint32_t value;
2888
2889 friend bool operator==(const CallData&, const CallData&);
2890
2891 void msgpack_unpack(msgpack::object const& o)
2892 {
2893 try {
2894 o.convert(value);
2895 } catch (const msgpack::type_error&) {
2896 std::cerr << o << std::endl;
2897 throw_or_abort("error converting into newtype 'CallData'");
2898 }
2899 }
2900 };
2901
2902 struct ReturnData {
2903 friend bool operator==(const ReturnData&, const ReturnData&);
2904
2905 void msgpack_unpack(msgpack::object const& o) {}
2906 };
2907
2909
2910 friend bool operator==(const BlockType&, const BlockType&);
2911
2912 void msgpack_unpack(msgpack::object const& o)
2913 {
2914
2915 if (o.type != msgpack::type::object_type::MAP && o.type != msgpack::type::object_type::STR) {
2916 std::cerr << o << std::endl;
2917 throw_or_abort("expected MAP or STR for enum 'BlockType'; got type " + std::to_string(o.type));
2918 }
2919 if (o.type == msgpack::type::object_type::MAP && o.via.map.size != 1) {
2920 throw_or_abort("expected 1 entry for enum 'BlockType'; got " + std::to_string(o.via.map.size));
2921 }
2922 std::string tag;
2923 try {
2924 if (o.type == msgpack::type::object_type::MAP) {
2925 o.via.map.ptr[0].key.convert(tag);
2926 } else {
2927 o.convert(tag);
2928 }
2929 } catch (const msgpack::type_error&) {
2930 std::cerr << o << std::endl;
2931 throw_or_abort("error converting tag to string for enum 'BlockType'");
2932 }
2933 if (tag == "Memory") {
2934 Memory v;
2935 value = v;
2936 } else if (tag == "CallData") {
2937 CallData v;
2938 if (o.type != msgpack::type::MAP) {
2939 throw_or_abort("expected MAP for enum variant, got STR (unit variant syntax for non-unit variant)");
2940 }
2941 try {
2942 o.via.map.ptr[0].val.convert(v);
2943 } catch (const msgpack::type_error&) {
2944 std::cerr << o << std::endl;
2945 throw_or_abort("error converting into enum variant 'BlockType::CallData'");
2946 }
2947
2948 value = v;
2949 } else if (tag == "ReturnData") {
2950 ReturnData v;
2951 value = v;
2952 } else {
2953 std::cerr << o << std::endl;
2954 throw_or_abort("unknown 'BlockType' enum variant: " + tag);
2955 }
2956 }
2957};
2958
2962 std::vector<uint8_t> q_c;
2963
2964 friend bool operator==(const Expression&, const Expression&);
2965
2966 void msgpack_unpack(msgpack::object const& o)
2967 {
2968 std::string name = "Expression";
2969 if (o.type == msgpack::type::MAP) {
2970 auto kvmap = Helpers::make_kvmap(o, name);
2971 Helpers::conv_fld_from_kvmap(kvmap, name, "mul_terms", mul_terms, false);
2972 Helpers::conv_fld_from_kvmap(kvmap, name, "linear_combinations", linear_combinations, false);
2973 Helpers::conv_fld_from_kvmap(kvmap, name, "q_c", q_c, false);
2974 } else if (o.type == msgpack::type::ARRAY) {
2975 auto array = o.via.array;
2976 Helpers::conv_fld_from_array(array, name, "mul_terms", mul_terms, 0);
2977 Helpers::conv_fld_from_array(array, name, "linear_combinations", linear_combinations, 1);
2978 Helpers::conv_fld_from_array(array, name, "q_c", q_c, 2);
2979 } else {
2980 throw_or_abort("expected MAP or ARRAY for " + name);
2981 }
2982 }
2983};
2984
2986
2987 struct Single {
2989
2990 friend bool operator==(const Single&, const Single&);
2991
2992 void msgpack_unpack(msgpack::object const& o)
2993 {
2994 try {
2995 o.convert(value);
2996 } catch (const msgpack::type_error&) {
2997 std::cerr << o << std::endl;
2998 throw_or_abort("error converting into newtype 'Single'");
2999 }
3000 }
3001 };
3002
3003 struct Array {
3004 std::vector<Acir::Expression> value;
3005
3006 friend bool operator==(const Array&, const Array&);
3007
3008 void msgpack_unpack(msgpack::object const& o)
3009 {
3010 try {
3011 o.convert(value);
3012 } catch (const msgpack::type_error&) {
3013 std::cerr << o << std::endl;
3014 throw_or_abort("error converting into newtype 'Array'");
3015 }
3016 }
3017 };
3018
3021
3022 friend bool operator==(const MemoryArray&, const MemoryArray&);
3023
3024 void msgpack_unpack(msgpack::object const& o)
3025 {
3026 try {
3027 o.convert(value);
3028 } catch (const msgpack::type_error&) {
3029 std::cerr << o << std::endl;
3030 throw_or_abort("error converting into newtype 'MemoryArray'");
3031 }
3032 }
3033 };
3034
3036
3037 friend bool operator==(const BrilligInputs&, const BrilligInputs&);
3038
3039 void msgpack_unpack(msgpack::object const& o)
3040 {
3041
3042 if (o.type != msgpack::type::object_type::MAP && o.type != msgpack::type::object_type::STR) {
3043 std::cerr << o << std::endl;
3044 throw_or_abort("expected MAP or STR for enum 'BrilligInputs'; got type " + std::to_string(o.type));
3045 }
3046 if (o.type == msgpack::type::object_type::MAP && o.via.map.size != 1) {
3047 throw_or_abort("expected 1 entry for enum 'BrilligInputs'; got " + std::to_string(o.via.map.size));
3048 }
3049 std::string tag;
3050 try {
3051 if (o.type == msgpack::type::object_type::MAP) {
3052 o.via.map.ptr[0].key.convert(tag);
3053 } else {
3054 o.convert(tag);
3055 }
3056 } catch (const msgpack::type_error&) {
3057 std::cerr << o << std::endl;
3058 throw_or_abort("error converting tag to string for enum 'BrilligInputs'");
3059 }
3060 if (tag == "Single") {
3061 Single v;
3062 if (o.type != msgpack::type::MAP) {
3063 throw_or_abort("expected MAP for enum variant, got STR (unit variant syntax for non-unit variant)");
3064 }
3065 try {
3066 o.via.map.ptr[0].val.convert(v);
3067 } catch (const msgpack::type_error&) {
3068 std::cerr << o << std::endl;
3069 throw_or_abort("error converting into enum variant 'BrilligInputs::Single'");
3070 }
3071
3072 value = v;
3073 } else if (tag == "Array") {
3074 Array v;
3075 if (o.type != msgpack::type::MAP) {
3076 throw_or_abort("expected MAP for enum variant, got STR (unit variant syntax for non-unit variant)");
3077 }
3078 try {
3079 o.via.map.ptr[0].val.convert(v);
3080 } catch (const msgpack::type_error&) {
3081 std::cerr << o << std::endl;
3082 throw_or_abort("error converting into enum variant 'BrilligInputs::Array'");
3083 }
3084
3085 value = v;
3086 } else if (tag == "MemoryArray") {
3087 MemoryArray v;
3088 if (o.type != msgpack::type::MAP) {
3089 throw_or_abort("expected MAP for enum variant, got STR (unit variant syntax for non-unit variant)");
3090 }
3091 try {
3092 o.via.map.ptr[0].val.convert(v);
3093 } catch (const msgpack::type_error&) {
3094 std::cerr << o << std::endl;
3095 throw_or_abort("error converting into enum variant 'BrilligInputs::MemoryArray'");
3096 }
3097
3098 value = v;
3099 } else {
3100 std::cerr << o << std::endl;
3101 throw_or_abort("unknown 'BrilligInputs' enum variant: " + tag);
3102 }
3103 }
3104};
3105
3107
3108 struct Simple {
3110
3111 friend bool operator==(const Simple&, const Simple&);
3112
3113 void msgpack_unpack(msgpack::object const& o)
3114 {
3115 try {
3116 o.convert(value);
3117 } catch (const msgpack::type_error&) {
3118 std::cerr << o << std::endl;
3119 throw_or_abort("error converting into newtype 'Simple'");
3120 }
3121 }
3122 };
3123
3124 struct Array {
3125 std::vector<Acir::Witness> value;
3126
3127 friend bool operator==(const Array&, const Array&);
3128
3129 void msgpack_unpack(msgpack::object const& o)
3130 {
3131 try {
3132 o.convert(value);
3133 } catch (const msgpack::type_error&) {
3134 std::cerr << o << std::endl;
3135 throw_or_abort("error converting into newtype 'Array'");
3136 }
3137 }
3138 };
3139
3141
3142 friend bool operator==(const BrilligOutputs&, const BrilligOutputs&);
3143
3144 void msgpack_unpack(msgpack::object const& o)
3145 {
3146
3147 if (o.type != msgpack::type::object_type::MAP && o.type != msgpack::type::object_type::STR) {
3148 std::cerr << o << std::endl;
3149 throw_or_abort("expected MAP or STR for enum 'BrilligOutputs'; got type " + std::to_string(o.type));
3150 }
3151 if (o.type == msgpack::type::object_type::MAP && o.via.map.size != 1) {
3152 throw_or_abort("expected 1 entry for enum 'BrilligOutputs'; got " + std::to_string(o.via.map.size));
3153 }
3154 std::string tag;
3155 try {
3156 if (o.type == msgpack::type::object_type::MAP) {
3157 o.via.map.ptr[0].key.convert(tag);
3158 } else {
3159 o.convert(tag);
3160 }
3161 } catch (const msgpack::type_error&) {
3162 std::cerr << o << std::endl;
3163 throw_or_abort("error converting tag to string for enum 'BrilligOutputs'");
3164 }
3165 if (tag == "Simple") {
3166 Simple v;
3167 if (o.type != msgpack::type::MAP) {
3168 throw_or_abort("expected MAP for enum variant, got STR (unit variant syntax for non-unit variant)");
3169 }
3170 try {
3171 o.via.map.ptr[0].val.convert(v);
3172 } catch (const msgpack::type_error&) {
3173 std::cerr << o << std::endl;
3174 throw_or_abort("error converting into enum variant 'BrilligOutputs::Simple'");
3175 }
3176
3177 value = v;
3178 } else if (tag == "Array") {
3179 Array v;
3180 if (o.type != msgpack::type::MAP) {
3181 throw_or_abort("expected MAP for enum variant, got STR (unit variant syntax for non-unit variant)");
3182 }
3183 try {
3184 o.via.map.ptr[0].val.convert(v);
3185 } catch (const msgpack::type_error&) {
3186 std::cerr << o << std::endl;
3187 throw_or_abort("error converting into enum variant 'BrilligOutputs::Array'");
3188 }
3189
3190 value = v;
3191 } else {
3192 std::cerr << o << std::endl;
3193 throw_or_abort("unknown 'BrilligOutputs' enum variant: " + tag);
3194 }
3195 }
3196};
3197
3198struct MemOp {
3202
3203 friend bool operator==(const MemOp&, const MemOp&);
3204
3205 void msgpack_unpack(msgpack::object const& o)
3206 {
3207 std::string name = "MemOp";
3208 if (o.type == msgpack::type::MAP) {
3209 auto kvmap = Helpers::make_kvmap(o, name);
3210 Helpers::conv_fld_from_kvmap(kvmap, name, "operation", operation, false);
3211 Helpers::conv_fld_from_kvmap(kvmap, name, "index", index, false);
3212 Helpers::conv_fld_from_kvmap(kvmap, name, "value", value, false);
3213 } else if (o.type == msgpack::type::ARRAY) {
3214 auto array = o.via.array;
3215 Helpers::conv_fld_from_array(array, name, "operation", operation, 0);
3216 Helpers::conv_fld_from_array(array, name, "index", index, 1);
3217 Helpers::conv_fld_from_array(array, name, "value", value, 2);
3218 } else {
3219 throw_or_abort("expected MAP or ARRAY for " + name);
3220 }
3221 }
3222};
3223
3224struct Opcode {
3225
3226 struct AssertZero {
3228
3229 friend bool operator==(const AssertZero&, const AssertZero&);
3230
3231 void msgpack_unpack(msgpack::object const& o)
3232 {
3233 try {
3234 o.convert(value);
3235 } catch (const msgpack::type_error&) {
3236 std::cerr << o << std::endl;
3237 throw_or_abort("error converting into newtype 'AssertZero'");
3238 }
3239 }
3240 };
3241
3244
3245 friend bool operator==(const BlackBoxFuncCall&, const BlackBoxFuncCall&);
3246
3247 void msgpack_unpack(msgpack::object const& o)
3248 {
3249 try {
3250 o.convert(value);
3251 } catch (const msgpack::type_error&) {
3252 std::cerr << o << std::endl;
3253 throw_or_abort("error converting into newtype 'BlackBoxFuncCall'");
3254 }
3255 }
3256 };
3257
3258 struct MemoryOp {
3261
3262 friend bool operator==(const MemoryOp&, const MemoryOp&);
3263
3264 void msgpack_unpack(msgpack::object const& o)
3265 {
3266 std::string name = "MemoryOp";
3267 if (o.type == msgpack::type::MAP) {
3268 auto kvmap = Helpers::make_kvmap(o, name);
3269 Helpers::conv_fld_from_kvmap(kvmap, name, "block_id", block_id, false);
3270 Helpers::conv_fld_from_kvmap(kvmap, name, "op", op, false);
3271 } else if (o.type == msgpack::type::ARRAY) {
3272 auto array = o.via.array;
3273 Helpers::conv_fld_from_array(array, name, "block_id", block_id, 0);
3274 Helpers::conv_fld_from_array(array, name, "op", op, 1);
3275 } else {
3276 throw_or_abort("expected MAP or ARRAY for " + name);
3277 }
3278 }
3279 };
3280
3281 struct MemoryInit {
3283 std::vector<Acir::Witness> init;
3285
3286 friend bool operator==(const MemoryInit&, const MemoryInit&);
3287
3288 void msgpack_unpack(msgpack::object const& o)
3289 {
3290 std::string name = "MemoryInit";
3291 if (o.type == msgpack::type::MAP) {
3292 auto kvmap = Helpers::make_kvmap(o, name);
3293 Helpers::conv_fld_from_kvmap(kvmap, name, "block_id", block_id, false);
3294 Helpers::conv_fld_from_kvmap(kvmap, name, "init", init, false);
3295 Helpers::conv_fld_from_kvmap(kvmap, name, "block_type", block_type, false);
3296 } else if (o.type == msgpack::type::ARRAY) {
3297 auto array = o.via.array;
3298 Helpers::conv_fld_from_array(array, name, "block_id", block_id, 0);
3299 Helpers::conv_fld_from_array(array, name, "init", init, 1);
3300 Helpers::conv_fld_from_array(array, name, "block_type", block_type, 2);
3301 } else {
3302 throw_or_abort("expected MAP or ARRAY for " + name);
3303 }
3304 }
3305 };
3306
3308 uint32_t id;
3309 std::vector<Acir::BrilligInputs> inputs;
3310 std::vector<Acir::BrilligOutputs> outputs;
3312
3313 friend bool operator==(const BrilligCall&, const BrilligCall&);
3314
3315 void msgpack_unpack(msgpack::object const& o)
3316 {
3317 std::string name = "BrilligCall";
3318 if (o.type == msgpack::type::MAP) {
3319 auto kvmap = Helpers::make_kvmap(o, name);
3320 Helpers::conv_fld_from_kvmap(kvmap, name, "id", id, false);
3321 Helpers::conv_fld_from_kvmap(kvmap, name, "inputs", inputs, false);
3322 Helpers::conv_fld_from_kvmap(kvmap, name, "outputs", outputs, false);
3323 Helpers::conv_fld_from_kvmap(kvmap, name, "predicate", predicate, true);
3324 } else if (o.type == msgpack::type::ARRAY) {
3325 auto array = o.via.array;
3326 Helpers::conv_fld_from_array(array, name, "id", id, 0);
3327 Helpers::conv_fld_from_array(array, name, "inputs", inputs, 1);
3328 Helpers::conv_fld_from_array(array, name, "outputs", outputs, 2);
3329 Helpers::conv_fld_from_array(array, name, "predicate", predicate, 3);
3330 } else {
3331 throw_or_abort("expected MAP or ARRAY for " + name);
3332 }
3333 }
3334 };
3335
3336 struct Call {
3337 uint32_t id;
3338 std::vector<Acir::Witness> inputs;
3339 std::vector<Acir::Witness> outputs;
3341
3342 friend bool operator==(const Call&, const Call&);
3343
3344 void msgpack_unpack(msgpack::object const& o)
3345 {
3346 std::string name = "Call";
3347 if (o.type == msgpack::type::MAP) {
3348 auto kvmap = Helpers::make_kvmap(o, name);
3349 Helpers::conv_fld_from_kvmap(kvmap, name, "id", id, false);
3350 Helpers::conv_fld_from_kvmap(kvmap, name, "inputs", inputs, false);
3351 Helpers::conv_fld_from_kvmap(kvmap, name, "outputs", outputs, false);
3352 Helpers::conv_fld_from_kvmap(kvmap, name, "predicate", predicate, true);
3353 } else if (o.type == msgpack::type::ARRAY) {
3354 auto array = o.via.array;
3355 Helpers::conv_fld_from_array(array, name, "id", id, 0);
3356 Helpers::conv_fld_from_array(array, name, "inputs", inputs, 1);
3357 Helpers::conv_fld_from_array(array, name, "outputs", outputs, 2);
3358 Helpers::conv_fld_from_array(array, name, "predicate", predicate, 3);
3359 } else {
3360 throw_or_abort("expected MAP or ARRAY for " + name);
3361 }
3362 }
3363 };
3364
3366
3367 friend bool operator==(const Opcode&, const Opcode&);
3368
3369 void msgpack_unpack(msgpack::object const& o)
3370 {
3371
3372 if (o.type != msgpack::type::object_type::MAP && o.type != msgpack::type::object_type::STR) {
3373 std::cerr << o << std::endl;
3374 throw_or_abort("expected MAP or STR for enum 'Opcode'; got type " + std::to_string(o.type));
3375 }
3376 if (o.type == msgpack::type::object_type::MAP && o.via.map.size != 1) {
3377 throw_or_abort("expected 1 entry for enum 'Opcode'; got " + std::to_string(o.via.map.size));
3378 }
3379 std::string tag;
3380 try {
3381 if (o.type == msgpack::type::object_type::MAP) {
3382 o.via.map.ptr[0].key.convert(tag);
3383 } else {
3384 o.convert(tag);
3385 }
3386 } catch (const msgpack::type_error&) {
3387 std::cerr << o << std::endl;
3388 throw_or_abort("error converting tag to string for enum 'Opcode'");
3389 }
3390 if (tag == "AssertZero") {
3391 AssertZero v;
3392 if (o.type != msgpack::type::MAP) {
3393 throw_or_abort("expected MAP for enum variant, got STR (unit variant syntax for non-unit variant)");
3394 }
3395 try {
3396 o.via.map.ptr[0].val.convert(v);
3397 } catch (const msgpack::type_error&) {
3398 std::cerr << o << std::endl;
3399 throw_or_abort("error converting into enum variant 'Opcode::AssertZero'");
3400 }
3401
3402 value = v;
3403 } else if (tag == "BlackBoxFuncCall") {
3405 if (o.type != msgpack::type::MAP) {
3406 throw_or_abort("expected MAP for enum variant, got STR (unit variant syntax for non-unit variant)");
3407 }
3408 try {
3409 o.via.map.ptr[0].val.convert(v);
3410 } catch (const msgpack::type_error&) {
3411 std::cerr << o << std::endl;
3412 throw_or_abort("error converting into enum variant 'Opcode::BlackBoxFuncCall'");
3413 }
3414
3415 value = v;
3416 } else if (tag == "MemoryOp") {
3417 MemoryOp v;
3418 if (o.type != msgpack::type::MAP) {
3419 throw_or_abort("expected MAP for enum variant, got STR (unit variant syntax for non-unit variant)");
3420 }
3421 try {
3422 o.via.map.ptr[0].val.convert(v);
3423 } catch (const msgpack::type_error&) {
3424 std::cerr << o << std::endl;
3425 throw_or_abort("error converting into enum variant 'Opcode::MemoryOp'");
3426 }
3427
3428 value = v;
3429 } else if (tag == "MemoryInit") {
3430 MemoryInit v;
3431 if (o.type != msgpack::type::MAP) {
3432 throw_or_abort("expected MAP for enum variant, got STR (unit variant syntax for non-unit variant)");
3433 }
3434 try {
3435 o.via.map.ptr[0].val.convert(v);
3436 } catch (const msgpack::type_error&) {
3437 std::cerr << o << std::endl;
3438 throw_or_abort("error converting into enum variant 'Opcode::MemoryInit'");
3439 }
3440
3441 value = v;
3442 } else if (tag == "BrilligCall") {
3443 BrilligCall v;
3444 if (o.type != msgpack::type::MAP) {
3445 throw_or_abort("expected MAP for enum variant, got STR (unit variant syntax for non-unit variant)");
3446 }
3447 try {
3448 o.via.map.ptr[0].val.convert(v);
3449 } catch (const msgpack::type_error&) {
3450 std::cerr << o << std::endl;
3451 throw_or_abort("error converting into enum variant 'Opcode::BrilligCall'");
3452 }
3453
3454 value = v;
3455 } else if (tag == "Call") {
3456 Call v;
3457 if (o.type != msgpack::type::MAP) {
3458 throw_or_abort("expected MAP for enum variant, got STR (unit variant syntax for non-unit variant)");
3459 }
3460 try {
3461 o.via.map.ptr[0].val.convert(v);
3462 } catch (const msgpack::type_error&) {
3463 std::cerr << o << std::endl;
3464 throw_or_abort("error converting into enum variant 'Opcode::Call'");
3465 }
3466
3467 value = v;
3468 } else {
3469 std::cerr << o << std::endl;
3470 throw_or_abort("unknown 'Opcode' enum variant: " + tag);
3471 }
3472 }
3473};
3474
3476
3477 struct Expression {
3479
3480 friend bool operator==(const Expression&, const Expression&);
3481
3482 void msgpack_unpack(msgpack::object const& o)
3483 {
3484 try {
3485 o.convert(value);
3486 } catch (const msgpack::type_error&) {
3487 std::cerr << o << std::endl;
3488 throw_or_abort("error converting into newtype 'Expression'");
3489 }
3490 }
3491 };
3492
3493 struct Memory {
3495
3496 friend bool operator==(const Memory&, const Memory&);
3497
3498 void msgpack_unpack(msgpack::object const& o)
3499 {
3500 try {
3501 o.convert(value);
3502 } catch (const msgpack::type_error&) {
3503 std::cerr << o << std::endl;
3504 throw_or_abort("error converting into newtype 'Memory'");
3505 }
3506 }
3507 };
3508
3510
3511 friend bool operator==(const ExpressionOrMemory&, const ExpressionOrMemory&);
3512
3513 void msgpack_unpack(msgpack::object const& o)
3514 {
3515
3516 if (o.type != msgpack::type::object_type::MAP && o.type != msgpack::type::object_type::STR) {
3517 std::cerr << o << std::endl;
3518 throw_or_abort("expected MAP or STR for enum 'ExpressionOrMemory'; got type " + std::to_string(o.type));
3519 }
3520 if (o.type == msgpack::type::object_type::MAP && o.via.map.size != 1) {
3521 throw_or_abort("expected 1 entry for enum 'ExpressionOrMemory'; got " + std::to_string(o.via.map.size));
3522 }
3523 std::string tag;
3524 try {
3525 if (o.type == msgpack::type::object_type::MAP) {
3526 o.via.map.ptr[0].key.convert(tag);
3527 } else {
3528 o.convert(tag);
3529 }
3530 } catch (const msgpack::type_error&) {
3531 std::cerr << o << std::endl;
3532 throw_or_abort("error converting tag to string for enum 'ExpressionOrMemory'");
3533 }
3534 if (tag == "Expression") {
3535 Expression v;
3536 if (o.type != msgpack::type::MAP) {
3537 throw_or_abort("expected MAP for enum variant, got STR (unit variant syntax for non-unit variant)");
3538 }
3539 try {
3540 o.via.map.ptr[0].val.convert(v);
3541 } catch (const msgpack::type_error&) {
3542 std::cerr << o << std::endl;
3543 throw_or_abort("error converting into enum variant 'ExpressionOrMemory::Expression'");
3544 }
3545
3546 value = v;
3547 } else if (tag == "Memory") {
3548 Memory v;
3549 if (o.type != msgpack::type::MAP) {
3550 throw_or_abort("expected MAP for enum variant, got STR (unit variant syntax for non-unit variant)");
3551 }
3552 try {
3553 o.via.map.ptr[0].val.convert(v);
3554 } catch (const msgpack::type_error&) {
3555 std::cerr << o << std::endl;
3556 throw_or_abort("error converting into enum variant 'ExpressionOrMemory::Memory'");
3557 }
3558
3559 value = v;
3560 } else {
3561 std::cerr << o << std::endl;
3562 throw_or_abort("unknown 'ExpressionOrMemory' enum variant: " + tag);
3563 }
3564 }
3565};
3566
3569 std::vector<Acir::ExpressionOrMemory> payload;
3570
3571 friend bool operator==(const AssertionPayload&, const AssertionPayload&);
3572
3573 void msgpack_unpack(msgpack::object const& o)
3574 {
3575 std::string name = "AssertionPayload";
3576 if (o.type == msgpack::type::MAP) {
3577 auto kvmap = Helpers::make_kvmap(o, name);
3578 Helpers::conv_fld_from_kvmap(kvmap, name, "error_selector", error_selector, false);
3579 Helpers::conv_fld_from_kvmap(kvmap, name, "payload", payload, false);
3580 } else if (o.type == msgpack::type::ARRAY) {
3581 auto array = o.via.array;
3582 Helpers::conv_fld_from_array(array, name, "error_selector", error_selector, 0);
3583 Helpers::conv_fld_from_array(array, name, "payload", payload, 1);
3584 } else {
3585 throw_or_abort("expected MAP or ARRAY for " + name);
3586 }
3587 }
3588};
3589
3591
3592 struct Acir {
3593 uint64_t value;
3594
3595 friend bool operator==(const Acir&, const Acir&);
3596
3597 void msgpack_unpack(msgpack::object const& o)
3598 {
3599 try {
3600 o.convert(value);
3601 } catch (const msgpack::type_error&) {
3602 std::cerr << o << std::endl;
3603 throw_or_abort("error converting into newtype 'Acir'");
3604 }
3605 }
3606 };
3607
3608 struct Brillig {
3609 uint64_t acir_index;
3611
3612 friend bool operator==(const Brillig&, const Brillig&);
3613
3614 void msgpack_unpack(msgpack::object const& o)
3615 {
3616 std::string name = "Brillig";
3617 if (o.type == msgpack::type::MAP) {
3618 auto kvmap = Helpers::make_kvmap(o, name);
3619 Helpers::conv_fld_from_kvmap(kvmap, name, "acir_index", acir_index, false);
3620 Helpers::conv_fld_from_kvmap(kvmap, name, "brillig_index", brillig_index, false);
3621 } else if (o.type == msgpack::type::ARRAY) {
3622 auto array = o.via.array;
3623 Helpers::conv_fld_from_array(array, name, "acir_index", acir_index, 0);
3624 Helpers::conv_fld_from_array(array, name, "brillig_index", brillig_index, 1);
3625 } else {
3626 throw_or_abort("expected MAP or ARRAY for " + name);
3627 }
3628 }
3629 };
3630
3632
3633 friend bool operator==(const OpcodeLocation&, const OpcodeLocation&);
3634
3635 void msgpack_unpack(msgpack::object const& o)
3636 {
3637
3638 if (o.type != msgpack::type::object_type::MAP && o.type != msgpack::type::object_type::STR) {
3639 std::cerr << o << std::endl;
3640 throw_or_abort("expected MAP or STR for enum 'OpcodeLocation'; got type " + std::to_string(o.type));
3641 }
3642 if (o.type == msgpack::type::object_type::MAP && o.via.map.size != 1) {
3643 throw_or_abort("expected 1 entry for enum 'OpcodeLocation'; got " + std::to_string(o.via.map.size));
3644 }
3645 std::string tag;
3646 try {
3647 if (o.type == msgpack::type::object_type::MAP) {
3648 o.via.map.ptr[0].key.convert(tag);
3649 } else {
3650 o.convert(tag);
3651 }
3652 } catch (const msgpack::type_error&) {
3653 std::cerr << o << std::endl;
3654 throw_or_abort("error converting tag to string for enum 'OpcodeLocation'");
3655 }
3656 if (tag == "Acir") {
3657 Acir v;
3658 if (o.type != msgpack::type::MAP) {
3659 throw_or_abort("expected MAP for enum variant, got STR (unit variant syntax for non-unit variant)");
3660 }
3661 try {
3662 o.via.map.ptr[0].val.convert(v);
3663 } catch (const msgpack::type_error&) {
3664 std::cerr << o << std::endl;
3665 throw_or_abort("error converting into enum variant 'OpcodeLocation::Acir'");
3666 }
3667
3668 value = v;
3669 } else if (tag == "Brillig") {
3670 Brillig v;
3671 if (o.type != msgpack::type::MAP) {
3672 throw_or_abort("expected MAP for enum variant, got STR (unit variant syntax for non-unit variant)");
3673 }
3674 try {
3675 o.via.map.ptr[0].val.convert(v);
3676 } catch (const msgpack::type_error&) {
3677 std::cerr << o << std::endl;
3678 throw_or_abort("error converting into enum variant 'OpcodeLocation::Brillig'");
3679 }
3680
3681 value = v;
3682 } else {
3683 std::cerr << o << std::endl;
3684 throw_or_abort("unknown 'OpcodeLocation' enum variant: " + tag);
3685 }
3686 }
3687};
3688
3690 std::vector<Acir::Witness> value;
3691
3692 friend bool operator==(const PublicInputs&, const PublicInputs&);
3693
3694 void msgpack_unpack(msgpack::object const& o)
3695 {
3696 try {
3697 o.convert(value);
3698 } catch (const msgpack::type_error&) {
3699 std::cerr << o << std::endl;
3700 throw_or_abort("error converting into newtype 'PublicInputs'");
3701 }
3702 }
3703};
3704
3705struct Circuit {
3706 std::string function_name;
3708 std::vector<Acir::Opcode> opcodes;
3709 std::vector<Acir::Witness> private_parameters;
3713
3714 friend bool operator==(const Circuit&, const Circuit&);
3715
3716 void msgpack_unpack(msgpack::object const& o)
3717 {
3718 std::string name = "Circuit";
3719 if (o.type == msgpack::type::MAP) {
3720 auto kvmap = Helpers::make_kvmap(o, name);
3721 Helpers::conv_fld_from_kvmap(kvmap, name, "function_name", function_name, false);
3722 Helpers::conv_fld_from_kvmap(kvmap, name, "current_witness_index", current_witness_index, true);
3723 Helpers::conv_fld_from_kvmap(kvmap, name, "opcodes", opcodes, false);
3724 Helpers::conv_fld_from_kvmap(kvmap, name, "private_parameters", private_parameters, false);
3725 Helpers::conv_fld_from_kvmap(kvmap, name, "public_parameters", public_parameters, false);
3726 Helpers::conv_fld_from_kvmap(kvmap, name, "return_values", return_values, false);
3727 Helpers::conv_fld_from_kvmap(kvmap, name, "assert_messages", assert_messages, false);
3728 } else if (o.type == msgpack::type::ARRAY) {
3729 auto array = o.via.array;
3730 Helpers::conv_fld_from_array(array, name, "function_name", function_name, 0);
3731 Helpers::conv_fld_from_array(array, name, "current_witness_index", current_witness_index, 1);
3732 Helpers::conv_fld_from_array(array, name, "opcodes", opcodes, 2);
3733 Helpers::conv_fld_from_array(array, name, "private_parameters", private_parameters, 3);
3734 Helpers::conv_fld_from_array(array, name, "public_parameters", public_parameters, 4);
3735 Helpers::conv_fld_from_array(array, name, "return_values", return_values, 5);
3736 Helpers::conv_fld_from_array(array, name, "assert_messages", assert_messages, 6);
3737 } else {
3738 throw_or_abort("expected MAP or ARRAY for " + name);
3739 }
3740 }
3741};
3742
3744 std::string function_name;
3745 std::vector<Acir::BrilligOpcode> bytecode;
3746
3747 friend bool operator==(const BrilligBytecode&, const BrilligBytecode&);
3748
3749 void msgpack_unpack(msgpack::object const& o)
3750 {
3751 std::string name = "BrilligBytecode";
3752 if (o.type == msgpack::type::MAP) {
3753 auto kvmap = Helpers::make_kvmap(o, name);
3754 Helpers::conv_fld_from_kvmap(kvmap, name, "function_name", function_name, false);
3755 Helpers::conv_fld_from_kvmap(kvmap, name, "bytecode", bytecode, false);
3756 } else if (o.type == msgpack::type::ARRAY) {
3757 auto array = o.via.array;
3758 Helpers::conv_fld_from_array(array, name, "function_name", function_name, 0);
3759 Helpers::conv_fld_from_array(array, name, "bytecode", bytecode, 1);
3760 } else {
3761 throw_or_abort("expected MAP or ARRAY for " + name);
3762 }
3763 }
3764};
3765
3766struct Program {
3767 std::vector<Acir::Circuit> functions;
3768 std::vector<Acir::BrilligBytecode> unconstrained_functions;
3769
3770 friend bool operator==(const Program&, const Program&);
3771
3772 void msgpack_unpack(msgpack::object const& o)
3773 {
3774 std::string name = "Program";
3775 if (o.type == msgpack::type::MAP) {
3776 auto kvmap = Helpers::make_kvmap(o, name);
3777 Helpers::conv_fld_from_kvmap(kvmap, name, "functions", functions, false);
3778 Helpers::conv_fld_from_kvmap(kvmap, name, "unconstrained_functions", unconstrained_functions, false);
3779 } else if (o.type == msgpack::type::ARRAY) {
3780 auto array = o.via.array;
3781 Helpers::conv_fld_from_array(array, name, "functions", functions, 0);
3782 Helpers::conv_fld_from_array(array, name, "unconstrained_functions", unconstrained_functions, 1);
3783 } else {
3784 throw_or_abort("expected MAP or ARRAY for " + name);
3785 }
3786 }
3787};
3788
3790 std::vector<Acir::Circuit> functions;
3792
3793 friend bool operator==(const ProgramWithoutBrillig&, const ProgramWithoutBrillig&);
3794
3795 void msgpack_unpack(msgpack::object const& o)
3796 {
3797 std::string name = "ProgramWithoutBrillig";
3798 if (o.type == msgpack::type::MAP) {
3799 auto kvmap = Helpers::make_kvmap(o, name);
3800 Helpers::conv_fld_from_kvmap(kvmap, name, "functions", functions, false);
3801 } else if (o.type == msgpack::type::ARRAY) {
3802 auto array = o.via.array;
3803 Helpers::conv_fld_from_array(array, name, "functions", functions, 0);
3804 } else {
3805 throw_or_abort("expected MAP or ARRAY for " + name);
3806 }
3807 }
3808};
3809
3810} // end of namespace Acir
3811
3812namespace Acir {
3813
3814inline bool operator==(const AssertionPayload& lhs, const AssertionPayload& rhs)
3815{
3816 if (!(lhs.error_selector == rhs.error_selector)) {
3817 return false;
3818 }
3819 if (!(lhs.payload == rhs.payload)) {
3820 return false;
3821 }
3822 return true;
3823}
3824
3825} // end of namespace Acir
3826
3827template <>
3828template <typename Serializer>
3830{
3831 serializer.increase_container_depth();
3832 serde::Serializable<decltype(obj.error_selector)>::serialize(obj.error_selector, serializer);
3833 serde::Serializable<decltype(obj.payload)>::serialize(obj.payload, serializer);
3834 serializer.decrease_container_depth();
3835}
3836
3837template <>
3838template <typename Deserializer>
3840{
3841 deserializer.increase_container_depth();
3843 obj.error_selector = serde::Deserializable<decltype(obj.error_selector)>::deserialize(deserializer);
3844 obj.payload = serde::Deserializable<decltype(obj.payload)>::deserialize(deserializer);
3845 deserializer.decrease_container_depth();
3846 return obj;
3847}
3848
3849namespace Acir {
3850
3851inline bool operator==(const BinaryFieldOp& lhs, const BinaryFieldOp& rhs)
3852{
3853 if (!(lhs.value == rhs.value)) {
3854 return false;
3855 }
3856 return true;
3857}
3858
3859} // end of namespace Acir
3860
3861template <>
3862template <typename Serializer>
3864{
3865 serializer.increase_container_depth();
3866 serde::Serializable<decltype(obj.value)>::serialize(obj.value, serializer);
3867 serializer.decrease_container_depth();
3868}
3869
3870template <>
3871template <typename Deserializer>
3873{
3874 deserializer.increase_container_depth();
3876 obj.value = serde::Deserializable<decltype(obj.value)>::deserialize(deserializer);
3877 deserializer.decrease_container_depth();
3878 return obj;
3879}
3880
3881namespace Acir {
3882
3883inline bool operator==(const BinaryFieldOp::Add& lhs, const BinaryFieldOp::Add& rhs)
3884{
3885 return true;
3886}
3887
3888} // end of namespace Acir
3889
3890template <>
3891template <typename Serializer>
3895
3896template <>
3897template <typename Deserializer>
3903
3904namespace Acir {
3905
3906inline bool operator==(const BinaryFieldOp::Sub& lhs, const BinaryFieldOp::Sub& rhs)
3907{
3908 return true;
3909}
3910
3911} // end of namespace Acir
3912
3913template <>
3914template <typename Serializer>
3918
3919template <>
3920template <typename Deserializer>
3926
3927namespace Acir {
3928
3929inline bool operator==(const BinaryFieldOp::Mul& lhs, const BinaryFieldOp::Mul& rhs)
3930{
3931 return true;
3932}
3933
3934} // end of namespace Acir
3935
3936template <>
3937template <typename Serializer>
3941
3942template <>
3943template <typename Deserializer>
3949
3950namespace Acir {
3951
3952inline bool operator==(const BinaryFieldOp::Div& lhs, const BinaryFieldOp::Div& rhs)
3953{
3954 return true;
3955}
3956
3957} // end of namespace Acir
3958
3959template <>
3960template <typename Serializer>
3964
3965template <>
3966template <typename Deserializer>
3972
3973namespace Acir {
3974
3976{
3977 return true;
3978}
3979
3980} // end of namespace Acir
3981
3982template <>
3983template <typename Serializer>
3987
3988template <>
3989template <typename Deserializer>
3996
3997namespace Acir {
3998
3999inline bool operator==(const BinaryFieldOp::Equals& lhs, const BinaryFieldOp::Equals& rhs)
4000{
4001 return true;
4002}
4003
4004} // end of namespace Acir
4005
4006template <>
4007template <typename Serializer>
4011
4012template <>
4013template <typename Deserializer>
4019
4020namespace Acir {
4021
4023{
4024 return true;
4025}
4026
4027} // end of namespace Acir
4028
4029template <>
4030template <typename Serializer>
4034
4035template <>
4036template <typename Deserializer>
4043
4044namespace Acir {
4045
4047{
4048 return true;
4049}
4050
4051} // end of namespace Acir
4052
4053template <>
4054template <typename Serializer>
4058
4059template <>
4060template <typename Deserializer>
4067
4068namespace Acir {
4069
4070inline bool operator==(const BinaryIntOp& lhs, const BinaryIntOp& rhs)
4071{
4072 if (!(lhs.value == rhs.value)) {
4073 return false;
4074 }
4075 return true;
4076}
4077
4078} // end of namespace Acir
4079
4080template <>
4081template <typename Serializer>
4083{
4084 serializer.increase_container_depth();
4085 serde::Serializable<decltype(obj.value)>::serialize(obj.value, serializer);
4086 serializer.decrease_container_depth();
4087}
4088
4089template <>
4090template <typename Deserializer>
4092{
4093 deserializer.increase_container_depth();
4095 obj.value = serde::Deserializable<decltype(obj.value)>::deserialize(deserializer);
4096 deserializer.decrease_container_depth();
4097 return obj;
4098}
4099
4100namespace Acir {
4101
4102inline bool operator==(const BinaryIntOp::Add& lhs, const BinaryIntOp::Add& rhs)
4103{
4104 return true;
4105}
4106
4107} // end of namespace Acir
4108
4109template <>
4110template <typename Serializer>
4113
4114template <>
4115template <typename Deserializer>
4121
4122namespace Acir {
4123
4124inline bool operator==(const BinaryIntOp::Sub& lhs, const BinaryIntOp::Sub& rhs)
4125{
4126 return true;
4127}
4128
4129} // end of namespace Acir
4130
4131template <>
4132template <typename Serializer>
4135
4136template <>
4137template <typename Deserializer>
4143
4144namespace Acir {
4145
4146inline bool operator==(const BinaryIntOp::Mul& lhs, const BinaryIntOp::Mul& rhs)
4147{
4148 return true;
4149}
4150
4151} // end of namespace Acir
4152
4153template <>
4154template <typename Serializer>
4157
4158template <>
4159template <typename Deserializer>
4165
4166namespace Acir {
4167
4168inline bool operator==(const BinaryIntOp::Div& lhs, const BinaryIntOp::Div& rhs)
4169{
4170 return true;
4171}
4172
4173} // end of namespace Acir
4174
4175template <>
4176template <typename Serializer>
4179
4180template <>
4181template <typename Deserializer>
4187
4188namespace Acir {
4189
4190inline bool operator==(const BinaryIntOp::Equals& lhs, const BinaryIntOp::Equals& rhs)
4191{
4192 return true;
4193}
4194
4195} // end of namespace Acir
4196
4197template <>
4198template <typename Serializer>
4202
4203template <>
4204template <typename Deserializer>
4210
4211namespace Acir {
4212
4213inline bool operator==(const BinaryIntOp::LessThan& lhs, const BinaryIntOp::LessThan& rhs)
4214{
4215 return true;
4216}
4217
4218} // end of namespace Acir
4219
4220template <>
4221template <typename Serializer>
4225
4226template <>
4227template <typename Deserializer>
4233
4234namespace Acir {
4235
4237{
4238 return true;
4239}
4240
4241} // end of namespace Acir
4242
4243template <>
4244template <typename Serializer>
4248
4249template <>
4250template <typename Deserializer>
4257
4258namespace Acir {
4259
4260inline bool operator==(const BinaryIntOp::And& lhs, const BinaryIntOp::And& rhs)
4261{
4262 return true;
4263}
4264
4265} // end of namespace Acir
4266
4267template <>
4268template <typename Serializer>
4271
4272template <>
4273template <typename Deserializer>
4279
4280namespace Acir {
4281
4282inline bool operator==(const BinaryIntOp::Or& lhs, const BinaryIntOp::Or& rhs)
4283{
4284 return true;
4285}
4286
4287} // end of namespace Acir
4288
4289template <>
4290template <typename Serializer>
4293
4294template <>
4295template <typename Deserializer>
4297{
4299 return obj;
4300}
4301
4302namespace Acir {
4303
4304inline bool operator==(const BinaryIntOp::Xor& lhs, const BinaryIntOp::Xor& rhs)
4305{
4306 return true;
4307}
4308
4309} // end of namespace Acir
4310
4311template <>
4312template <typename Serializer>
4315
4316template <>
4317template <typename Deserializer>
4323
4324namespace Acir {
4325
4326inline bool operator==(const BinaryIntOp::Shl& lhs, const BinaryIntOp::Shl& rhs)
4327{
4328 return true;
4329}
4330
4331} // end of namespace Acir
4332
4333template <>
4334template <typename Serializer>
4337
4338template <>
4339template <typename Deserializer>
4345
4346namespace Acir {
4347
4348inline bool operator==(const BinaryIntOp::Shr& lhs, const BinaryIntOp::Shr& rhs)
4349{
4350 return true;
4351}
4352
4353} // end of namespace Acir
4354
4355template <>
4356template <typename Serializer>
4359
4360template <>
4361template <typename Deserializer>
4367
4368namespace Acir {
4369
4370inline bool operator==(const BitSize& lhs, const BitSize& rhs)
4371{
4372 if (!(lhs.value == rhs.value)) {
4373 return false;
4374 }
4375 return true;
4376}
4377
4378} // end of namespace Acir
4379
4380template <>
4381template <typename Serializer>
4382void serde::Serializable<Acir::BitSize>::serialize(const Acir::BitSize& obj, Serializer& serializer)
4383{
4384 serializer.increase_container_depth();
4385 serde::Serializable<decltype(obj.value)>::serialize(obj.value, serializer);
4386 serializer.decrease_container_depth();
4387}
4388
4389template <>
4390template <typename Deserializer>
4392{
4393 deserializer.increase_container_depth();
4394 Acir::BitSize obj;
4395 obj.value = serde::Deserializable<decltype(obj.value)>::deserialize(deserializer);
4396 deserializer.decrease_container_depth();
4397 return obj;
4398}
4399
4400namespace Acir {
4401
4402inline bool operator==(const BitSize::Field& lhs, const BitSize::Field& rhs)
4403{
4404 return true;
4405}
4406
4407} // end of namespace Acir
4408
4409template <>
4410template <typename Serializer>
4413
4414template <>
4415template <typename Deserializer>
4417{
4419 return obj;
4420}
4421
4422namespace Acir {
4423
4424inline bool operator==(const BitSize::Integer& lhs, const BitSize::Integer& rhs)
4425{
4426 if (!(lhs.value == rhs.value)) {
4427 return false;
4428 }
4429 return true;
4430}
4431
4432} // end of namespace Acir
4433
4434template <>
4435template <typename Serializer>
4437{
4438 serde::Serializable<decltype(obj.value)>::serialize(obj.value, serializer);
4439}
4440
4441template <>
4442template <typename Deserializer>
4444{
4446 obj.value = serde::Deserializable<decltype(obj.value)>::deserialize(deserializer);
4447 return obj;
4448}
4449
4450namespace Acir {
4451
4452inline bool operator==(const BlackBoxFuncCall& lhs, const BlackBoxFuncCall& rhs)
4453{
4454 if (!(lhs.value == rhs.value)) {
4455 return false;
4456 }
4457 return true;
4458}
4459
4460} // end of namespace Acir
4461
4462template <>
4463template <typename Serializer>
4465{
4466 serializer.increase_container_depth();
4467 serde::Serializable<decltype(obj.value)>::serialize(obj.value, serializer);
4468 serializer.decrease_container_depth();
4469}
4470
4471template <>
4472template <typename Deserializer>
4474{
4475 deserializer.increase_container_depth();
4477 obj.value = serde::Deserializable<decltype(obj.value)>::deserialize(deserializer);
4478 deserializer.decrease_container_depth();
4479 return obj;
4480}
4481
4482namespace Acir {
4483
4485{
4486 if (!(lhs.inputs == rhs.inputs)) {
4487 return false;
4488 }
4489 if (!(lhs.iv == rhs.iv)) {
4490 return false;
4491 }
4492 if (!(lhs.key == rhs.key)) {
4493 return false;
4494 }
4495 if (!(lhs.outputs == rhs.outputs)) {
4496 return false;
4497 }
4498 return true;
4499}
4500
4501} // end of namespace Acir
4502
4503template <>
4504template <typename Serializer>
4506 const Acir::BlackBoxFuncCall::AES128Encrypt& obj, Serializer& serializer)
4507{
4508 serde::Serializable<decltype(obj.inputs)>::serialize(obj.inputs, serializer);
4509 serde::Serializable<decltype(obj.iv)>::serialize(obj.iv, serializer);
4510 serde::Serializable<decltype(obj.key)>::serialize(obj.key, serializer);
4511 serde::Serializable<decltype(obj.outputs)>::serialize(obj.outputs, serializer);
4512}
4513
4514template <>
4515template <typename Deserializer>
4517 Deserializer& deserializer)
4518{
4520 obj.inputs = serde::Deserializable<decltype(obj.inputs)>::deserialize(deserializer);
4521 obj.iv = serde::Deserializable<decltype(obj.iv)>::deserialize(deserializer);
4522 obj.key = serde::Deserializable<decltype(obj.key)>::deserialize(deserializer);
4523 obj.outputs = serde::Deserializable<decltype(obj.outputs)>::deserialize(deserializer);
4524 return obj;
4525}
4526
4527namespace Acir {
4528
4529inline bool operator==(const BlackBoxFuncCall::AND& lhs, const BlackBoxFuncCall::AND& rhs)
4530{
4531 if (!(lhs.lhs == rhs.lhs)) {
4532 return false;
4533 }
4534 if (!(lhs.rhs == rhs.rhs)) {
4535 return false;
4536 }
4537 if (!(lhs.num_bits == rhs.num_bits)) {
4538 return false;
4539 }
4540 if (!(lhs.output == rhs.output)) {
4541 return false;
4542 }
4543 return true;
4544}
4545
4546} // end of namespace Acir
4547
4548template <>
4549template <typename Serializer>
4551 Serializer& serializer)
4552{
4553 serde::Serializable<decltype(obj.lhs)>::serialize(obj.lhs, serializer);
4554 serde::Serializable<decltype(obj.rhs)>::serialize(obj.rhs, serializer);
4555 serde::Serializable<decltype(obj.num_bits)>::serialize(obj.num_bits, serializer);
4556 serde::Serializable<decltype(obj.output)>::serialize(obj.output, serializer);
4557}
4558
4559template <>
4560template <typename Deserializer>
4562{
4564 obj.lhs = serde::Deserializable<decltype(obj.lhs)>::deserialize(deserializer);
4565 obj.rhs = serde::Deserializable<decltype(obj.rhs)>::deserialize(deserializer);
4566 obj.num_bits = serde::Deserializable<decltype(obj.num_bits)>::deserialize(deserializer);
4567 obj.output = serde::Deserializable<decltype(obj.output)>::deserialize(deserializer);
4568 return obj;
4569}
4570
4571namespace Acir {
4572
4573inline bool operator==(const BlackBoxFuncCall::XOR& lhs, const BlackBoxFuncCall::XOR& rhs)
4574{
4575 if (!(lhs.lhs == rhs.lhs)) {
4576 return false;
4577 }
4578 if (!(lhs.rhs == rhs.rhs)) {
4579 return false;
4580 }
4581 if (!(lhs.num_bits == rhs.num_bits)) {
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 Serializer& serializer)
4596{
4597 serde::Serializable<decltype(obj.lhs)>::serialize(obj.lhs, serializer);
4598 serde::Serializable<decltype(obj.rhs)>::serialize(obj.rhs, serializer);
4599 serde::Serializable<decltype(obj.num_bits)>::serialize(obj.num_bits, serializer);
4600 serde::Serializable<decltype(obj.output)>::serialize(obj.output, serializer);
4601}
4602
4603template <>
4604template <typename Deserializer>
4606{
4608 obj.lhs = serde::Deserializable<decltype(obj.lhs)>::deserialize(deserializer);
4609 obj.rhs = serde::Deserializable<decltype(obj.rhs)>::deserialize(deserializer);
4610 obj.num_bits = serde::Deserializable<decltype(obj.num_bits)>::deserialize(deserializer);
4611 obj.output = serde::Deserializable<decltype(obj.output)>::deserialize(deserializer);
4612 return obj;
4613}
4614
4615namespace Acir {
4616
4618{
4619 if (!(lhs.input == rhs.input)) {
4620 return false;
4621 }
4622 if (!(lhs.num_bits == rhs.num_bits)) {
4623 return false;
4624 }
4625 return true;
4626}
4627
4628} // end of namespace Acir
4629
4630template <>
4631template <typename Serializer>
4633 Serializer& serializer)
4634{
4635 serde::Serializable<decltype(obj.input)>::serialize(obj.input, serializer);
4636 serde::Serializable<decltype(obj.num_bits)>::serialize(obj.num_bits, serializer);
4637}
4638
4639template <>
4640template <typename Deserializer>
4642 Deserializer& deserializer)
4643{
4645 obj.input = serde::Deserializable<decltype(obj.input)>::deserialize(deserializer);
4646 obj.num_bits = serde::Deserializable<decltype(obj.num_bits)>::deserialize(deserializer);
4647 return obj;
4648}
4649
4650namespace Acir {
4651
4653{
4654 if (!(lhs.inputs == rhs.inputs)) {
4655 return false;
4656 }
4657 if (!(lhs.outputs == rhs.outputs)) {
4658 return false;
4659 }
4660 return true;
4661}
4662
4663} // end of namespace Acir
4664
4665template <>
4666template <typename Serializer>
4668 Serializer& serializer)
4669{
4670 serde::Serializable<decltype(obj.inputs)>::serialize(obj.inputs, serializer);
4671 serde::Serializable<decltype(obj.outputs)>::serialize(obj.outputs, serializer);
4672}
4673
4674template <>
4675template <typename Deserializer>
4677 Deserializer& deserializer)
4678{
4680 obj.inputs = serde::Deserializable<decltype(obj.inputs)>::deserialize(deserializer);
4681 obj.outputs = serde::Deserializable<decltype(obj.outputs)>::deserialize(deserializer);
4682 return obj;
4683}
4684
4685namespace Acir {
4686
4688{
4689 if (!(lhs.inputs == rhs.inputs)) {
4690 return false;
4691 }
4692 if (!(lhs.outputs == rhs.outputs)) {
4693 return false;
4694 }
4695 return true;
4696}
4697
4698} // end of namespace Acir
4699
4700template <>
4701template <typename Serializer>
4703 Serializer& serializer)
4704{
4705 serde::Serializable<decltype(obj.inputs)>::serialize(obj.inputs, serializer);
4706 serde::Serializable<decltype(obj.outputs)>::serialize(obj.outputs, serializer);
4707}
4708
4709template <>
4710template <typename Deserializer>
4712 Deserializer& deserializer)
4713{
4715 obj.inputs = serde::Deserializable<decltype(obj.inputs)>::deserialize(deserializer);
4716 obj.outputs = serde::Deserializable<decltype(obj.outputs)>::deserialize(deserializer);
4717 return obj;
4718}
4719
4720namespace Acir {
4721
4723{
4724 if (!(lhs.public_key_x == rhs.public_key_x)) {
4725 return false;
4726 }
4727 if (!(lhs.public_key_y == rhs.public_key_y)) {
4728 return false;
4729 }
4730 if (!(lhs.signature == rhs.signature)) {
4731 return false;
4732 }
4733 if (!(lhs.hashed_message == rhs.hashed_message)) {
4734 return false;
4735 }
4736 if (!(lhs.predicate == rhs.predicate)) {
4737 return false;
4738 }
4739 if (!(lhs.output == rhs.output)) {
4740 return false;
4741 }
4742 return true;
4743}
4744
4745} // end of namespace Acir
4746
4747template <>
4748template <typename Serializer>
4750 const Acir::BlackBoxFuncCall::EcdsaSecp256k1& obj, Serializer& serializer)
4751{
4752 serde::Serializable<decltype(obj.public_key_x)>::serialize(obj.public_key_x, serializer);
4753 serde::Serializable<decltype(obj.public_key_y)>::serialize(obj.public_key_y, serializer);
4754 serde::Serializable<decltype(obj.signature)>::serialize(obj.signature, serializer);
4755 serde::Serializable<decltype(obj.hashed_message)>::serialize(obj.hashed_message, serializer);
4756 serde::Serializable<decltype(obj.predicate)>::serialize(obj.predicate, serializer);
4757 serde::Serializable<decltype(obj.output)>::serialize(obj.output, serializer);
4758}
4759
4760template <>
4761template <typename Deserializer>
4763 Deserializer& deserializer)
4764{
4766 obj.public_key_x = serde::Deserializable<decltype(obj.public_key_x)>::deserialize(deserializer);
4767 obj.public_key_y = serde::Deserializable<decltype(obj.public_key_y)>::deserialize(deserializer);
4768 obj.signature = serde::Deserializable<decltype(obj.signature)>::deserialize(deserializer);
4769 obj.hashed_message = serde::Deserializable<decltype(obj.hashed_message)>::deserialize(deserializer);
4770 obj.predicate = serde::Deserializable<decltype(obj.predicate)>::deserialize(deserializer);
4771 obj.output = serde::Deserializable<decltype(obj.output)>::deserialize(deserializer);
4772 return obj;
4773}
4774
4775namespace Acir {
4776
4778{
4779 if (!(lhs.public_key_x == rhs.public_key_x)) {
4780 return false;
4781 }
4782 if (!(lhs.public_key_y == rhs.public_key_y)) {
4783 return false;
4784 }
4785 if (!(lhs.signature == rhs.signature)) {
4786 return false;
4787 }
4788 if (!(lhs.hashed_message == rhs.hashed_message)) {
4789 return false;
4790 }
4791 if (!(lhs.predicate == rhs.predicate)) {
4792 return false;
4793 }
4794 if (!(lhs.output == rhs.output)) {
4795 return false;
4796 }
4797 return true;
4798}
4799
4800} // end of namespace Acir
4801
4802template <>
4803template <typename Serializer>
4805 const Acir::BlackBoxFuncCall::EcdsaSecp256r1& obj, Serializer& serializer)
4806{
4807 serde::Serializable<decltype(obj.public_key_x)>::serialize(obj.public_key_x, serializer);
4808 serde::Serializable<decltype(obj.public_key_y)>::serialize(obj.public_key_y, serializer);
4809 serde::Serializable<decltype(obj.signature)>::serialize(obj.signature, serializer);
4810 serde::Serializable<decltype(obj.hashed_message)>::serialize(obj.hashed_message, serializer);
4811 serde::Serializable<decltype(obj.predicate)>::serialize(obj.predicate, serializer);
4812 serde::Serializable<decltype(obj.output)>::serialize(obj.output, serializer);
4813}
4814
4815template <>
4816template <typename Deserializer>
4818 Deserializer& deserializer)
4819{
4821 obj.public_key_x = serde::Deserializable<decltype(obj.public_key_x)>::deserialize(deserializer);
4822 obj.public_key_y = serde::Deserializable<decltype(obj.public_key_y)>::deserialize(deserializer);
4823 obj.signature = serde::Deserializable<decltype(obj.signature)>::deserialize(deserializer);
4824 obj.hashed_message = serde::Deserializable<decltype(obj.hashed_message)>::deserialize(deserializer);
4825 obj.predicate = serde::Deserializable<decltype(obj.predicate)>::deserialize(deserializer);
4826 obj.output = serde::Deserializable<decltype(obj.output)>::deserialize(deserializer);
4827 return obj;
4828}
4829
4830namespace Acir {
4831
4833{
4834 if (!(lhs.points == rhs.points)) {
4835 return false;
4836 }
4837 if (!(lhs.scalars == rhs.scalars)) {
4838 return false;
4839 }
4840 if (!(lhs.predicate == rhs.predicate)) {
4841 return false;
4842 }
4843 if (!(lhs.outputs == rhs.outputs)) {
4844 return false;
4845 }
4846 return true;
4847}
4848
4849} // end of namespace Acir
4850
4851template <>
4852template <typename Serializer>
4854 const Acir::BlackBoxFuncCall::MultiScalarMul& obj, Serializer& serializer)
4855{
4856 serde::Serializable<decltype(obj.points)>::serialize(obj.points, serializer);
4857 serde::Serializable<decltype(obj.scalars)>::serialize(obj.scalars, serializer);
4858 serde::Serializable<decltype(obj.predicate)>::serialize(obj.predicate, serializer);
4859 serde::Serializable<decltype(obj.outputs)>::serialize(obj.outputs, serializer);
4860}
4861
4862template <>
4863template <typename Deserializer>
4865 Deserializer& deserializer)
4866{
4868 obj.points = serde::Deserializable<decltype(obj.points)>::deserialize(deserializer);
4869 obj.scalars = serde::Deserializable<decltype(obj.scalars)>::deserialize(deserializer);
4870 obj.predicate = serde::Deserializable<decltype(obj.predicate)>::deserialize(deserializer);
4871 obj.outputs = serde::Deserializable<decltype(obj.outputs)>::deserialize(deserializer);
4872 return obj;
4873}
4874
4875namespace Acir {
4876
4878{
4879 if (!(lhs.input1 == rhs.input1)) {
4880 return false;
4881 }
4882 if (!(lhs.input2 == rhs.input2)) {
4883 return false;
4884 }
4885 if (!(lhs.predicate == rhs.predicate)) {
4886 return false;
4887 }
4888 if (!(lhs.outputs == rhs.outputs)) {
4889 return false;
4890 }
4891 return true;
4892}
4893
4894} // end of namespace Acir
4895
4896template <>
4897template <typename Serializer>
4899 const Acir::BlackBoxFuncCall::EmbeddedCurveAdd& obj, Serializer& serializer)
4900{
4901 serde::Serializable<decltype(obj.input1)>::serialize(obj.input1, serializer);
4902 serde::Serializable<decltype(obj.input2)>::serialize(obj.input2, serializer);
4903 serde::Serializable<decltype(obj.predicate)>::serialize(obj.predicate, serializer);
4904 serde::Serializable<decltype(obj.outputs)>::serialize(obj.outputs, serializer);
4905}
4906
4907template <>
4908template <typename Deserializer>
4910 Deserializer& deserializer)
4911{
4913 obj.input1 = serde::Deserializable<decltype(obj.input1)>::deserialize(deserializer);
4914 obj.input2 = serde::Deserializable<decltype(obj.input2)>::deserialize(deserializer);
4915 obj.predicate = serde::Deserializable<decltype(obj.predicate)>::deserialize(deserializer);
4916 obj.outputs = serde::Deserializable<decltype(obj.outputs)>::deserialize(deserializer);
4917 return obj;
4918}
4919
4920namespace Acir {
4921
4923{
4924 if (!(lhs.inputs == rhs.inputs)) {
4925 return false;
4926 }
4927 if (!(lhs.outputs == rhs.outputs)) {
4928 return false;
4929 }
4930 return true;
4931}
4932
4933} // end of namespace Acir
4934
4935template <>
4936template <typename Serializer>
4938 Serializer& serializer)
4939{
4940 serde::Serializable<decltype(obj.inputs)>::serialize(obj.inputs, serializer);
4941 serde::Serializable<decltype(obj.outputs)>::serialize(obj.outputs, serializer);
4942}
4943
4944template <>
4945template <typename Deserializer>
4947 Deserializer& deserializer)
4948{
4950 obj.inputs = serde::Deserializable<decltype(obj.inputs)>::deserialize(deserializer);
4951 obj.outputs = serde::Deserializable<decltype(obj.outputs)>::deserialize(deserializer);
4952 return obj;
4953}
4954
4955namespace Acir {
4956
4959{
4960 if (!(lhs.verification_key == rhs.verification_key)) {
4961 return false;
4962 }
4963 if (!(lhs.proof == rhs.proof)) {
4964 return false;
4965 }
4966 if (!(lhs.public_inputs == rhs.public_inputs)) {
4967 return false;
4968 }
4969 if (!(lhs.key_hash == rhs.key_hash)) {
4970 return false;
4971 }
4972 if (!(lhs.proof_type == rhs.proof_type)) {
4973 return false;
4974 }
4975 if (!(lhs.predicate == rhs.predicate)) {
4976 return false;
4977 }
4978 return true;
4979}
4980
4981} // end of namespace Acir
4982
4983template <>
4984template <typename Serializer>
4986 const Acir::BlackBoxFuncCall::RecursiveAggregation& obj, Serializer& serializer)
4987{
4988 serde::Serializable<decltype(obj.verification_key)>::serialize(obj.verification_key, serializer);
4989 serde::Serializable<decltype(obj.proof)>::serialize(obj.proof, serializer);
4990 serde::Serializable<decltype(obj.public_inputs)>::serialize(obj.public_inputs, serializer);
4991 serde::Serializable<decltype(obj.key_hash)>::serialize(obj.key_hash, serializer);
4992 serde::Serializable<decltype(obj.proof_type)>::serialize(obj.proof_type, serializer);
4993 serde::Serializable<decltype(obj.predicate)>::serialize(obj.predicate, serializer);
4994}
4995
4996template <>
4997template <typename Deserializer>
4999 Acir::BlackBoxFuncCall::RecursiveAggregation>::deserialize(Deserializer& deserializer)
5000{
5002 obj.verification_key = serde::Deserializable<decltype(obj.verification_key)>::deserialize(deserializer);
5003 obj.proof = serde::Deserializable<decltype(obj.proof)>::deserialize(deserializer);
5004 obj.public_inputs = serde::Deserializable<decltype(obj.public_inputs)>::deserialize(deserializer);
5005 obj.key_hash = serde::Deserializable<decltype(obj.key_hash)>::deserialize(deserializer);
5006 obj.proof_type = serde::Deserializable<decltype(obj.proof_type)>::deserialize(deserializer);
5007 obj.predicate = serde::Deserializable<decltype(obj.predicate)>::deserialize(deserializer);
5008 return obj;
5009}
5010
5011namespace Acir {
5012
5015{
5016 if (!(lhs.inputs == rhs.inputs)) {
5017 return false;
5018 }
5019 if (!(lhs.outputs == rhs.outputs)) {
5020 return false;
5021 }
5022 return true;
5023}
5024
5025} // end of namespace Acir
5026
5027template <>
5028template <typename Serializer>
5030 const Acir::BlackBoxFuncCall::Poseidon2Permutation& obj, Serializer& serializer)
5031{
5032 serde::Serializable<decltype(obj.inputs)>::serialize(obj.inputs, serializer);
5033 serde::Serializable<decltype(obj.outputs)>::serialize(obj.outputs, serializer);
5034}
5035
5036template <>
5037template <typename Deserializer>
5039 Acir::BlackBoxFuncCall::Poseidon2Permutation>::deserialize(Deserializer& deserializer)
5040{
5042 obj.inputs = serde::Deserializable<decltype(obj.inputs)>::deserialize(deserializer);
5043 obj.outputs = serde::Deserializable<decltype(obj.outputs)>::deserialize(deserializer);
5044 return obj;
5045}
5046
5047namespace Acir {
5048
5050{
5051 if (!(lhs.inputs == rhs.inputs)) {
5052 return false;
5053 }
5054 if (!(lhs.hash_values == rhs.hash_values)) {
5055 return false;
5056 }
5057 if (!(lhs.outputs == rhs.outputs)) {
5058 return false;
5059 }
5060 return true;
5061}
5062
5063} // end of namespace Acir
5064
5065template <>
5066template <typename Serializer>
5068 const Acir::BlackBoxFuncCall::Sha256Compression& obj, Serializer& serializer)
5069{
5070 serde::Serializable<decltype(obj.inputs)>::serialize(obj.inputs, serializer);
5071 serde::Serializable<decltype(obj.hash_values)>::serialize(obj.hash_values, serializer);
5072 serde::Serializable<decltype(obj.outputs)>::serialize(obj.outputs, serializer);
5073}
5074
5075template <>
5076template <typename Deserializer>
5078 Deserializer& deserializer)
5079{
5081 obj.inputs = serde::Deserializable<decltype(obj.inputs)>::deserialize(deserializer);
5082 obj.hash_values = serde::Deserializable<decltype(obj.hash_values)>::deserialize(deserializer);
5083 obj.outputs = serde::Deserializable<decltype(obj.outputs)>::deserialize(deserializer);
5084 return obj;
5085}
5086
5087namespace Acir {
5088
5089inline bool operator==(const BlackBoxOp& lhs, const BlackBoxOp& rhs)
5090{
5091 if (!(lhs.value == rhs.value)) {
5092 return false;
5093 }
5094 return true;
5095}
5096
5097} // end of namespace Acir
5098
5099template <>
5100template <typename Serializer>
5102{
5103 serializer.increase_container_depth();
5104 serde::Serializable<decltype(obj.value)>::serialize(obj.value, serializer);
5105 serializer.decrease_container_depth();
5106}
5107
5108template <>
5109template <typename Deserializer>
5111{
5112 deserializer.increase_container_depth();
5113 Acir::BlackBoxOp obj;
5114 obj.value = serde::Deserializable<decltype(obj.value)>::deserialize(deserializer);
5115 deserializer.decrease_container_depth();
5116 return obj;
5117}
5118
5119namespace Acir {
5120
5122{
5123 if (!(lhs.inputs == rhs.inputs)) {
5124 return false;
5125 }
5126 if (!(lhs.iv == rhs.iv)) {
5127 return false;
5128 }
5129 if (!(lhs.key == rhs.key)) {
5130 return false;
5131 }
5132 if (!(lhs.outputs == rhs.outputs)) {
5133 return false;
5134 }
5135 return true;
5136}
5137
5138} // end of namespace Acir
5139
5140template <>
5141template <typename Serializer>
5143 Serializer& serializer)
5144{
5145 serde::Serializable<decltype(obj.inputs)>::serialize(obj.inputs, serializer);
5146 serde::Serializable<decltype(obj.iv)>::serialize(obj.iv, serializer);
5147 serde::Serializable<decltype(obj.key)>::serialize(obj.key, serializer);
5148 serde::Serializable<decltype(obj.outputs)>::serialize(obj.outputs, serializer);
5149}
5150
5151template <>
5152template <typename Deserializer>
5154 Deserializer& deserializer)
5155{
5157 obj.inputs = serde::Deserializable<decltype(obj.inputs)>::deserialize(deserializer);
5158 obj.iv = serde::Deserializable<decltype(obj.iv)>::deserialize(deserializer);
5159 obj.key = serde::Deserializable<decltype(obj.key)>::deserialize(deserializer);
5160 obj.outputs = serde::Deserializable<decltype(obj.outputs)>::deserialize(deserializer);
5161 return obj;
5162}
5163
5164namespace Acir {
5165
5166inline bool operator==(const BlackBoxOp::Blake2s& lhs, const BlackBoxOp::Blake2s& rhs)
5167{
5168 if (!(lhs.message == rhs.message)) {
5169 return false;
5170 }
5171 if (!(lhs.output == rhs.output)) {
5172 return false;
5173 }
5174 return true;
5175}
5176
5177} // end of namespace Acir
5178
5179template <>
5180template <typename Serializer>
5182 Serializer& serializer)
5183{
5184 serde::Serializable<decltype(obj.message)>::serialize(obj.message, serializer);
5185 serde::Serializable<decltype(obj.output)>::serialize(obj.output, serializer);
5186}
5187
5188template <>
5189template <typename Deserializer>
5191{
5193 obj.message = serde::Deserializable<decltype(obj.message)>::deserialize(deserializer);
5194 obj.output = serde::Deserializable<decltype(obj.output)>::deserialize(deserializer);
5195 return obj;
5196}
5197
5198namespace Acir {
5199
5200inline bool operator==(const BlackBoxOp::Blake3& lhs, const BlackBoxOp::Blake3& rhs)
5201{
5202 if (!(lhs.message == rhs.message)) {
5203 return false;
5204 }
5205 if (!(lhs.output == rhs.output)) {
5206 return false;
5207 }
5208 return true;
5209}
5210
5211} // end of namespace Acir
5212
5213template <>
5214template <typename Serializer>
5216 Serializer& serializer)
5217{
5218 serde::Serializable<decltype(obj.message)>::serialize(obj.message, serializer);
5219 serde::Serializable<decltype(obj.output)>::serialize(obj.output, serializer);
5220}
5221
5222template <>
5223template <typename Deserializer>
5225{
5227 obj.message = serde::Deserializable<decltype(obj.message)>::deserialize(deserializer);
5228 obj.output = serde::Deserializable<decltype(obj.output)>::deserialize(deserializer);
5229 return obj;
5230}
5231
5232namespace Acir {
5233
5235{
5236 if (!(lhs.input == rhs.input)) {
5237 return false;
5238 }
5239 if (!(lhs.output == rhs.output)) {
5240 return false;
5241 }
5242 return true;
5243}
5244
5245} // end of namespace Acir
5246
5247template <>
5248template <typename Serializer>
5250 Serializer& serializer)
5251{
5252 serde::Serializable<decltype(obj.input)>::serialize(obj.input, serializer);
5253 serde::Serializable<decltype(obj.output)>::serialize(obj.output, serializer);
5254}
5255
5256template <>
5257template <typename Deserializer>
5259 Deserializer& deserializer)
5260{
5262 obj.input = serde::Deserializable<decltype(obj.input)>::deserialize(deserializer);
5263 obj.output = serde::Deserializable<decltype(obj.output)>::deserialize(deserializer);
5264 return obj;
5265}
5266
5267namespace Acir {
5268
5270{
5271 if (!(lhs.hashed_msg == rhs.hashed_msg)) {
5272 return false;
5273 }
5274 if (!(lhs.public_key_x == rhs.public_key_x)) {
5275 return false;
5276 }
5277 if (!(lhs.public_key_y == rhs.public_key_y)) {
5278 return false;
5279 }
5280 if (!(lhs.signature == rhs.signature)) {
5281 return false;
5282 }
5283 if (!(lhs.result == rhs.result)) {
5284 return false;
5285 }
5286 return true;
5287}
5288
5289} // end of namespace Acir
5290
5291template <>
5292template <typename Serializer>
5294 Serializer& serializer)
5295{
5296 serde::Serializable<decltype(obj.hashed_msg)>::serialize(obj.hashed_msg, serializer);
5297 serde::Serializable<decltype(obj.public_key_x)>::serialize(obj.public_key_x, serializer);
5298 serde::Serializable<decltype(obj.public_key_y)>::serialize(obj.public_key_y, serializer);
5299 serde::Serializable<decltype(obj.signature)>::serialize(obj.signature, serializer);
5300 serde::Serializable<decltype(obj.result)>::serialize(obj.result, serializer);
5301}
5302
5303template <>
5304template <typename Deserializer>
5306 Deserializer& deserializer)
5307{
5309 obj.hashed_msg = serde::Deserializable<decltype(obj.hashed_msg)>::deserialize(deserializer);
5310 obj.public_key_x = serde::Deserializable<decltype(obj.public_key_x)>::deserialize(deserializer);
5311 obj.public_key_y = serde::Deserializable<decltype(obj.public_key_y)>::deserialize(deserializer);
5312 obj.signature = serde::Deserializable<decltype(obj.signature)>::deserialize(deserializer);
5313 obj.result = serde::Deserializable<decltype(obj.result)>::deserialize(deserializer);
5314 return obj;
5315}
5316
5317namespace Acir {
5318
5320{
5321 if (!(lhs.hashed_msg == rhs.hashed_msg)) {
5322 return false;
5323 }
5324 if (!(lhs.public_key_x == rhs.public_key_x)) {
5325 return false;
5326 }
5327 if (!(lhs.public_key_y == rhs.public_key_y)) {
5328 return false;
5329 }
5330 if (!(lhs.signature == rhs.signature)) {
5331 return false;
5332 }
5333 if (!(lhs.result == rhs.result)) {
5334 return false;
5335 }
5336 return true;
5337}
5338
5339} // end of namespace Acir
5340
5341template <>
5342template <typename Serializer>
5344 Serializer& serializer)
5345{
5346 serde::Serializable<decltype(obj.hashed_msg)>::serialize(obj.hashed_msg, serializer);
5347 serde::Serializable<decltype(obj.public_key_x)>::serialize(obj.public_key_x, serializer);
5348 serde::Serializable<decltype(obj.public_key_y)>::serialize(obj.public_key_y, serializer);
5349 serde::Serializable<decltype(obj.signature)>::serialize(obj.signature, serializer);
5350 serde::Serializable<decltype(obj.result)>::serialize(obj.result, serializer);
5351}
5352
5353template <>
5354template <typename Deserializer>
5356 Deserializer& deserializer)
5357{
5359 obj.hashed_msg = serde::Deserializable<decltype(obj.hashed_msg)>::deserialize(deserializer);
5360 obj.public_key_x = serde::Deserializable<decltype(obj.public_key_x)>::deserialize(deserializer);
5361 obj.public_key_y = serde::Deserializable<decltype(obj.public_key_y)>::deserialize(deserializer);
5362 obj.signature = serde::Deserializable<decltype(obj.signature)>::deserialize(deserializer);
5363 obj.result = serde::Deserializable<decltype(obj.result)>::deserialize(deserializer);
5364 return obj;
5365}
5366
5367namespace Acir {
5368
5370{
5371 if (!(lhs.points == rhs.points)) {
5372 return false;
5373 }
5374 if (!(lhs.scalars == rhs.scalars)) {
5375 return false;
5376 }
5377 if (!(lhs.outputs == rhs.outputs)) {
5378 return false;
5379 }
5380 return true;
5381}
5382
5383} // end of namespace Acir
5384
5385template <>
5386template <typename Serializer>
5388 Serializer& serializer)
5389{
5390 serde::Serializable<decltype(obj.points)>::serialize(obj.points, serializer);
5391 serde::Serializable<decltype(obj.scalars)>::serialize(obj.scalars, serializer);
5392 serde::Serializable<decltype(obj.outputs)>::serialize(obj.outputs, serializer);
5393}
5394
5395template <>
5396template <typename Deserializer>
5398 Deserializer& deserializer)
5399{
5401 obj.points = serde::Deserializable<decltype(obj.points)>::deserialize(deserializer);
5402 obj.scalars = serde::Deserializable<decltype(obj.scalars)>::deserialize(deserializer);
5403 obj.outputs = serde::Deserializable<decltype(obj.outputs)>::deserialize(deserializer);
5404 return obj;
5405}
5406
5407namespace Acir {
5408
5410{
5411 if (!(lhs.input1_x == rhs.input1_x)) {
5412 return false;
5413 }
5414 if (!(lhs.input1_y == rhs.input1_y)) {
5415 return false;
5416 }
5417 if (!(lhs.input1_infinite == rhs.input1_infinite)) {
5418 return false;
5419 }
5420 if (!(lhs.input2_x == rhs.input2_x)) {
5421 return false;
5422 }
5423 if (!(lhs.input2_y == rhs.input2_y)) {
5424 return false;
5425 }
5426 if (!(lhs.input2_infinite == rhs.input2_infinite)) {
5427 return false;
5428 }
5429 if (!(lhs.result == rhs.result)) {
5430 return false;
5431 }
5432 return true;
5433}
5434
5435} // end of namespace Acir
5436
5437template <>
5438template <typename Serializer>
5440 Serializer& serializer)
5441{
5442 serde::Serializable<decltype(obj.input1_x)>::serialize(obj.input1_x, serializer);
5443 serde::Serializable<decltype(obj.input1_y)>::serialize(obj.input1_y, serializer);
5444 serde::Serializable<decltype(obj.input1_infinite)>::serialize(obj.input1_infinite, serializer);
5445 serde::Serializable<decltype(obj.input2_x)>::serialize(obj.input2_x, serializer);
5446 serde::Serializable<decltype(obj.input2_y)>::serialize(obj.input2_y, serializer);
5447 serde::Serializable<decltype(obj.input2_infinite)>::serialize(obj.input2_infinite, serializer);
5448 serde::Serializable<decltype(obj.result)>::serialize(obj.result, serializer);
5449}
5450
5451template <>
5452template <typename Deserializer>
5454 Deserializer& deserializer)
5455{
5457 obj.input1_x = serde::Deserializable<decltype(obj.input1_x)>::deserialize(deserializer);
5458 obj.input1_y = serde::Deserializable<decltype(obj.input1_y)>::deserialize(deserializer);
5459 obj.input1_infinite = serde::Deserializable<decltype(obj.input1_infinite)>::deserialize(deserializer);
5460 obj.input2_x = serde::Deserializable<decltype(obj.input2_x)>::deserialize(deserializer);
5461 obj.input2_y = serde::Deserializable<decltype(obj.input2_y)>::deserialize(deserializer);
5462 obj.input2_infinite = serde::Deserializable<decltype(obj.input2_infinite)>::deserialize(deserializer);
5463 obj.result = serde::Deserializable<decltype(obj.result)>::deserialize(deserializer);
5464 return obj;
5465}
5466
5467namespace Acir {
5468
5470{
5471 if (!(lhs.message == rhs.message)) {
5472 return false;
5473 }
5474 if (!(lhs.output == rhs.output)) {
5475 return false;
5476 }
5477 return true;
5478}
5479
5480} // end of namespace Acir
5481
5482template <>
5483template <typename Serializer>
5485 const Acir::BlackBoxOp::Poseidon2Permutation& obj, Serializer& serializer)
5486{
5487 serde::Serializable<decltype(obj.message)>::serialize(obj.message, serializer);
5488 serde::Serializable<decltype(obj.output)>::serialize(obj.output, serializer);
5489}
5490
5491template <>
5492template <typename Deserializer>
5494 Deserializer& deserializer)
5495{
5497 obj.message = serde::Deserializable<decltype(obj.message)>::deserialize(deserializer);
5498 obj.output = serde::Deserializable<decltype(obj.output)>::deserialize(deserializer);
5499 return obj;
5500}
5501
5502namespace Acir {
5503
5505{
5506 if (!(lhs.input == rhs.input)) {
5507 return false;
5508 }
5509 if (!(lhs.hash_values == rhs.hash_values)) {
5510 return false;
5511 }
5512 if (!(lhs.output == rhs.output)) {
5513 return false;
5514 }
5515 return true;
5516}
5517
5518} // end of namespace Acir
5519
5520template <>
5521template <typename Serializer>
5523 Serializer& serializer)
5524{
5525 serde::Serializable<decltype(obj.input)>::serialize(obj.input, serializer);
5526 serde::Serializable<decltype(obj.hash_values)>::serialize(obj.hash_values, serializer);
5527 serde::Serializable<decltype(obj.output)>::serialize(obj.output, serializer);
5528}
5529
5530template <>
5531template <typename Deserializer>
5533 Deserializer& deserializer)
5534{
5536 obj.input = serde::Deserializable<decltype(obj.input)>::deserialize(deserializer);
5537 obj.hash_values = serde::Deserializable<decltype(obj.hash_values)>::deserialize(deserializer);
5538 obj.output = serde::Deserializable<decltype(obj.output)>::deserialize(deserializer);
5539 return obj;
5540}
5541
5542namespace Acir {
5543
5544inline bool operator==(const BlackBoxOp::ToRadix& lhs, const BlackBoxOp::ToRadix& rhs)
5545{
5546 if (!(lhs.input == rhs.input)) {
5547 return false;
5548 }
5549 if (!(lhs.radix == rhs.radix)) {
5550 return false;
5551 }
5552 if (!(lhs.output_pointer == rhs.output_pointer)) {
5553 return false;
5554 }
5555 if (!(lhs.num_limbs == rhs.num_limbs)) {
5556 return false;
5557 }
5558 if (!(lhs.output_bits == rhs.output_bits)) {
5559 return false;
5560 }
5561 return true;
5562}
5563
5564} // end of namespace Acir
5565
5566template <>
5567template <typename Serializer>
5569 Serializer& serializer)
5570{
5571 serde::Serializable<decltype(obj.input)>::serialize(obj.input, serializer);
5572 serde::Serializable<decltype(obj.radix)>::serialize(obj.radix, serializer);
5573 serde::Serializable<decltype(obj.output_pointer)>::serialize(obj.output_pointer, serializer);
5574 serde::Serializable<decltype(obj.num_limbs)>::serialize(obj.num_limbs, serializer);
5575 serde::Serializable<decltype(obj.output_bits)>::serialize(obj.output_bits, serializer);
5576}
5577
5578template <>
5579template <typename Deserializer>
5581{
5583 obj.input = serde::Deserializable<decltype(obj.input)>::deserialize(deserializer);
5584 obj.radix = serde::Deserializable<decltype(obj.radix)>::deserialize(deserializer);
5585 obj.output_pointer = serde::Deserializable<decltype(obj.output_pointer)>::deserialize(deserializer);
5586 obj.num_limbs = serde::Deserializable<decltype(obj.num_limbs)>::deserialize(deserializer);
5587 obj.output_bits = serde::Deserializable<decltype(obj.output_bits)>::deserialize(deserializer);
5588 return obj;
5589}
5590
5591namespace Acir {
5592
5593inline bool operator==(const BlockId& lhs, const BlockId& rhs)
5594{
5595 if (!(lhs.value == rhs.value)) {
5596 return false;
5597 }
5598 return true;
5599}
5600
5601} // end of namespace Acir
5602
5603template <>
5604template <typename Serializer>
5605void serde::Serializable<Acir::BlockId>::serialize(const Acir::BlockId& obj, Serializer& serializer)
5606{
5607 serializer.increase_container_depth();
5608 serde::Serializable<decltype(obj.value)>::serialize(obj.value, serializer);
5609 serializer.decrease_container_depth();
5610}
5611
5612template <>
5613template <typename Deserializer>
5615{
5616 deserializer.increase_container_depth();
5617 Acir::BlockId obj;
5618 obj.value = serde::Deserializable<decltype(obj.value)>::deserialize(deserializer);
5619 deserializer.decrease_container_depth();
5620 return obj;
5621}
5622
5623namespace Acir {
5624
5625inline bool operator==(const BlockType& lhs, const BlockType& rhs)
5626{
5627 if (!(lhs.value == rhs.value)) {
5628 return false;
5629 }
5630 return true;
5631}
5632
5633} // end of namespace Acir
5634
5635template <>
5636template <typename Serializer>
5638{
5639 serializer.increase_container_depth();
5640 serde::Serializable<decltype(obj.value)>::serialize(obj.value, serializer);
5641 serializer.decrease_container_depth();
5642}
5643
5644template <>
5645template <typename Deserializer>
5647{
5648 deserializer.increase_container_depth();
5649 Acir::BlockType obj;
5650 obj.value = serde::Deserializable<decltype(obj.value)>::deserialize(deserializer);
5651 deserializer.decrease_container_depth();
5652 return obj;
5653}
5654
5655namespace Acir {
5656
5657inline bool operator==(const BlockType::Memory& lhs, const BlockType::Memory& rhs)
5658{
5659 return true;
5660}
5661
5662} // end of namespace Acir
5663
5664template <>
5665template <typename Serializer>
5668
5669template <>
5670template <typename Deserializer>
5676
5677namespace Acir {
5678
5679inline bool operator==(const BlockType::CallData& lhs, const BlockType::CallData& rhs)
5680{
5681 if (!(lhs.value == rhs.value)) {
5682 return false;
5683 }
5684 return true;
5685}
5686
5687} // end of namespace Acir
5688
5689template <>
5690template <typename Serializer>
5692 Serializer& serializer)
5693{
5694 serde::Serializable<decltype(obj.value)>::serialize(obj.value, serializer);
5695}
5696
5697template <>
5698template <typename Deserializer>
5700{
5702 obj.value = serde::Deserializable<decltype(obj.value)>::deserialize(deserializer);
5703 return obj;
5704}
5705
5706namespace Acir {
5707
5708inline bool operator==(const BlockType::ReturnData& lhs, const BlockType::ReturnData& rhs)
5709{
5710 return true;
5711}
5712
5713} // end of namespace Acir
5714
5715template <>
5716template <typename Serializer>
5720
5721template <>
5722template <typename Deserializer>
5728
5729namespace Acir {
5730
5731inline bool operator==(const BrilligBytecode& lhs, const BrilligBytecode& rhs)
5732{
5733 if (!(lhs.function_name == rhs.function_name)) {
5734 return false;
5735 }
5736 if (!(lhs.bytecode == rhs.bytecode)) {
5737 return false;
5738 }
5739 return true;
5740}
5741
5742} // end of namespace Acir
5743
5744template <>
5745template <typename Serializer>
5747{
5748 serializer.increase_container_depth();
5749 serde::Serializable<decltype(obj.function_name)>::serialize(obj.function_name, serializer);
5750 serde::Serializable<decltype(obj.bytecode)>::serialize(obj.bytecode, serializer);
5751 serializer.decrease_container_depth();
5752}
5753
5754template <>
5755template <typename Deserializer>
5757{
5758 deserializer.increase_container_depth();
5760 obj.function_name = serde::Deserializable<decltype(obj.function_name)>::deserialize(deserializer);
5761 obj.bytecode = serde::Deserializable<decltype(obj.bytecode)>::deserialize(deserializer);
5762 deserializer.decrease_container_depth();
5763 return obj;
5764}
5765
5766namespace Acir {
5767
5768inline bool operator==(const BrilligInputs& lhs, const BrilligInputs& rhs)
5769{
5770 if (!(lhs.value == rhs.value)) {
5771 return false;
5772 }
5773 return true;
5774}
5775
5776} // end of namespace Acir
5777
5778template <>
5779template <typename Serializer>
5781{
5782 serializer.increase_container_depth();
5783 serde::Serializable<decltype(obj.value)>::serialize(obj.value, serializer);
5784 serializer.decrease_container_depth();
5785}
5786
5787template <>
5788template <typename Deserializer>
5790{
5791 deserializer.increase_container_depth();
5793 obj.value = serde::Deserializable<decltype(obj.value)>::deserialize(deserializer);
5794 deserializer.decrease_container_depth();
5795 return obj;
5796}
5797
5798namespace Acir {
5799
5800inline bool operator==(const BrilligInputs::Single& lhs, const BrilligInputs::Single& rhs)
5801{
5802 if (!(lhs.value == rhs.value)) {
5803 return false;
5804 }
5805 return true;
5806}
5807
5808} // end of namespace Acir
5809
5810template <>
5811template <typename Serializer>
5813 Serializer& serializer)
5814{
5815 serde::Serializable<decltype(obj.value)>::serialize(obj.value, serializer);
5816}
5817
5818template <>
5819template <typename Deserializer>
5821{
5823 obj.value = serde::Deserializable<decltype(obj.value)>::deserialize(deserializer);
5824 return obj;
5825}
5826
5827namespace Acir {
5828
5829inline bool operator==(const BrilligInputs::Array& lhs, const BrilligInputs::Array& rhs)
5830{
5831 if (!(lhs.value == rhs.value)) {
5832 return false;
5833 }
5834 return true;
5835}
5836
5837} // end of namespace Acir
5838
5839template <>
5840template <typename Serializer>
5842 Serializer& serializer)
5843{
5844 serde::Serializable<decltype(obj.value)>::serialize(obj.value, serializer);
5845}
5846
5847template <>
5848template <typename Deserializer>
5850{
5852 obj.value = serde::Deserializable<decltype(obj.value)>::deserialize(deserializer);
5853 return obj;
5854}
5855
5856namespace Acir {
5857
5859{
5860 if (!(lhs.value == rhs.value)) {
5861 return false;
5862 }
5863 return true;
5864}
5865
5866} // end of namespace Acir
5867
5868template <>
5869template <typename Serializer>
5871 Serializer& serializer)
5872{
5873 serde::Serializable<decltype(obj.value)>::serialize(obj.value, serializer);
5874}
5875
5876template <>
5877template <typename Deserializer>
5879 Deserializer& deserializer)
5880{
5882 obj.value = serde::Deserializable<decltype(obj.value)>::deserialize(deserializer);
5883 return obj;
5884}
5885
5886namespace Acir {
5887
5888inline bool operator==(const BrilligOpcode& lhs, const BrilligOpcode& rhs)
5889{
5890 if (!(lhs.value == rhs.value)) {
5891 return false;
5892 }
5893 return true;
5894}
5895
5896} // end of namespace Acir
5897
5898template <>
5899template <typename Serializer>
5901{
5902 serializer.increase_container_depth();
5903 serde::Serializable<decltype(obj.value)>::serialize(obj.value, serializer);
5904 serializer.decrease_container_depth();
5905}
5906
5907template <>
5908template <typename Deserializer>
5910{
5911 deserializer.increase_container_depth();
5913 obj.value = serde::Deserializable<decltype(obj.value)>::deserialize(deserializer);
5914 deserializer.decrease_container_depth();
5915 return obj;
5916}
5917
5918namespace Acir {
5919
5921{
5922 if (!(lhs.destination == rhs.destination)) {
5923 return false;
5924 }
5925 if (!(lhs.op == rhs.op)) {
5926 return false;
5927 }
5928 if (!(lhs.lhs == rhs.lhs)) {
5929 return false;
5930 }
5931 if (!(lhs.rhs == rhs.rhs)) {
5932 return false;
5933 }
5934 return true;
5935}
5936
5937} // end of namespace Acir
5938
5939template <>
5940template <typename Serializer>
5942 Serializer& serializer)
5943{
5944 serde::Serializable<decltype(obj.destination)>::serialize(obj.destination, serializer);
5945 serde::Serializable<decltype(obj.op)>::serialize(obj.op, serializer);
5946 serde::Serializable<decltype(obj.lhs)>::serialize(obj.lhs, serializer);
5947 serde::Serializable<decltype(obj.rhs)>::serialize(obj.rhs, serializer);
5948}
5949
5950template <>
5951template <typename Deserializer>
5953 Deserializer& deserializer)
5954{
5956 obj.destination = serde::Deserializable<decltype(obj.destination)>::deserialize(deserializer);
5957 obj.op = serde::Deserializable<decltype(obj.op)>::deserialize(deserializer);
5958 obj.lhs = serde::Deserializable<decltype(obj.lhs)>::deserialize(deserializer);
5959 obj.rhs = serde::Deserializable<decltype(obj.rhs)>::deserialize(deserializer);
5960 return obj;
5961}
5962
5963namespace Acir {
5964
5966{
5967 if (!(lhs.destination == rhs.destination)) {
5968 return false;
5969 }
5970 if (!(lhs.op == rhs.op)) {
5971 return false;
5972 }
5973 if (!(lhs.bit_size == rhs.bit_size)) {
5974 return false;
5975 }
5976 if (!(lhs.lhs == rhs.lhs)) {
5977 return false;
5978 }
5979 if (!(lhs.rhs == rhs.rhs)) {
5980 return false;
5981 }
5982 return true;
5983}
5984
5985} // end of namespace Acir
5986
5987template <>
5988template <typename Serializer>
5990 Serializer& serializer)
5991{
5992 serde::Serializable<decltype(obj.destination)>::serialize(obj.destination, serializer);
5993 serde::Serializable<decltype(obj.op)>::serialize(obj.op, serializer);
5994 serde::Serializable<decltype(obj.bit_size)>::serialize(obj.bit_size, serializer);
5995 serde::Serializable<decltype(obj.lhs)>::serialize(obj.lhs, serializer);
5996 serde::Serializable<decltype(obj.rhs)>::serialize(obj.rhs, serializer);
5997}
5998
5999template <>
6000template <typename Deserializer>
6002 Deserializer& deserializer)
6003{
6005 obj.destination = serde::Deserializable<decltype(obj.destination)>::deserialize(deserializer);
6006 obj.op = serde::Deserializable<decltype(obj.op)>::deserialize(deserializer);
6007 obj.bit_size = serde::Deserializable<decltype(obj.bit_size)>::deserialize(deserializer);
6008 obj.lhs = serde::Deserializable<decltype(obj.lhs)>::deserialize(deserializer);
6009 obj.rhs = serde::Deserializable<decltype(obj.rhs)>::deserialize(deserializer);
6010 return obj;
6011}
6012
6013namespace Acir {
6014
6015inline bool operator==(const BrilligOpcode::Not& lhs, const BrilligOpcode::Not& rhs)
6016{
6017 if (!(lhs.destination == rhs.destination)) {
6018 return false;
6019 }
6020 if (!(lhs.source == rhs.source)) {
6021 return false;
6022 }
6023 if (!(lhs.bit_size == rhs.bit_size)) {
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.source)>::serialize(obj.source, serializer);
6038 serde::Serializable<decltype(obj.bit_size)>::serialize(obj.bit_size, serializer);
6039}
6040
6041template <>
6042template <typename Deserializer>
6044{
6046 obj.destination = serde::Deserializable<decltype(obj.destination)>::deserialize(deserializer);
6047 obj.source = serde::Deserializable<decltype(obj.source)>::deserialize(deserializer);
6048 obj.bit_size = serde::Deserializable<decltype(obj.bit_size)>::deserialize(deserializer);
6049 return obj;
6050}
6051
6052namespace Acir {
6053
6054inline bool operator==(const BrilligOpcode::Cast& lhs, const BrilligOpcode::Cast& rhs)
6055{
6056 if (!(lhs.destination == rhs.destination)) {
6057 return false;
6058 }
6059 if (!(lhs.source == rhs.source)) {
6060 return false;
6061 }
6062 if (!(lhs.bit_size == rhs.bit_size)) {
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)>::serialize(obj.destination, serializer);
6076 serde::Serializable<decltype(obj.source)>::serialize(obj.source, serializer);
6077 serde::Serializable<decltype(obj.bit_size)>::serialize(obj.bit_size, serializer);
6078}
6079
6080template <>
6081template <typename Deserializer>
6083{
6085 obj.destination = serde::Deserializable<decltype(obj.destination)>::deserialize(deserializer);
6086 obj.source = serde::Deserializable<decltype(obj.source)>::deserialize(deserializer);
6087 obj.bit_size = serde::Deserializable<decltype(obj.bit_size)>::deserialize(deserializer);
6088 return obj;
6089}
6090
6091namespace Acir {
6092
6093inline bool operator==(const BrilligOpcode::JumpIf& lhs, const BrilligOpcode::JumpIf& rhs)
6094{
6095 if (!(lhs.condition == rhs.condition)) {
6096 return false;
6097 }
6098 if (!(lhs.location == rhs.location)) {
6099 return false;
6100 }
6101 return true;
6102}
6103
6104} // end of namespace Acir
6105
6106template <>
6107template <typename Serializer>
6109 Serializer& serializer)
6110{
6111 serde::Serializable<decltype(obj.condition)>::serialize(obj.condition, serializer);
6112 serde::Serializable<decltype(obj.location)>::serialize(obj.location, serializer);
6113}
6114
6115template <>
6116template <typename Deserializer>
6118{
6120 obj.condition = serde::Deserializable<decltype(obj.condition)>::deserialize(deserializer);
6121 obj.location = serde::Deserializable<decltype(obj.location)>::deserialize(deserializer);
6122 return obj;
6123}
6124
6125namespace Acir {
6126
6127inline bool operator==(const BrilligOpcode::Jump& lhs, const BrilligOpcode::Jump& rhs)
6128{
6129 if (!(lhs.location == rhs.location)) {
6130 return false;
6131 }
6132 return true;
6133}
6134
6135} // end of namespace Acir
6136
6137template <>
6138template <typename Serializer>
6140 Serializer& serializer)
6141{
6142 serde::Serializable<decltype(obj.location)>::serialize(obj.location, serializer);
6143}
6144
6145template <>
6146template <typename Deserializer>
6148{
6150 obj.location = serde::Deserializable<decltype(obj.location)>::deserialize(deserializer);
6151 return obj;
6152}
6153
6154namespace Acir {
6155
6157{
6158 if (!(lhs.destination_address == rhs.destination_address)) {
6159 return false;
6160 }
6161 if (!(lhs.size_address == rhs.size_address)) {
6162 return false;
6163 }
6164 if (!(lhs.offset_address == rhs.offset_address)) {
6165 return false;
6166 }
6167 return true;
6168}
6169
6170} // end of namespace Acir
6171
6172template <>
6173template <typename Serializer>
6175 Serializer& serializer)
6176{
6177 serde::Serializable<decltype(obj.destination_address)>::serialize(obj.destination_address, serializer);
6178 serde::Serializable<decltype(obj.size_address)>::serialize(obj.size_address, serializer);
6179 serde::Serializable<decltype(obj.offset_address)>::serialize(obj.offset_address, serializer);
6180}
6181
6182template <>
6183template <typename Deserializer>
6185 Deserializer& deserializer)
6186{
6188 obj.destination_address = serde::Deserializable<decltype(obj.destination_address)>::deserialize(deserializer);
6189 obj.size_address = serde::Deserializable<decltype(obj.size_address)>::deserialize(deserializer);
6190 obj.offset_address = serde::Deserializable<decltype(obj.offset_address)>::deserialize(deserializer);
6191 return obj;
6192}
6193
6194namespace Acir {
6195
6196inline bool operator==(const BrilligOpcode::Call& lhs, const BrilligOpcode::Call& rhs)
6197{
6198 if (!(lhs.location == rhs.location)) {
6199 return false;
6200 }
6201 return true;
6202}
6203
6204} // end of namespace Acir
6205
6206template <>
6207template <typename Serializer>
6209 Serializer& serializer)
6210{
6211 serde::Serializable<decltype(obj.location)>::serialize(obj.location, serializer);
6212}
6213
6214template <>
6215template <typename Deserializer>
6217{
6219 obj.location = serde::Deserializable<decltype(obj.location)>::deserialize(deserializer);
6220 return obj;
6221}
6222
6223namespace Acir {
6224
6225inline bool operator==(const BrilligOpcode::Const& lhs, const BrilligOpcode::Const& rhs)
6226{
6227 if (!(lhs.destination == rhs.destination)) {
6228 return false;
6229 }
6230 if (!(lhs.bit_size == rhs.bit_size)) {
6231 return false;
6232 }
6233 if (!(lhs.value == rhs.value)) {
6234 return false;
6235 }
6236 return true;
6237}
6238
6239} // end of namespace Acir
6240
6241template <>
6242template <typename Serializer>
6244 Serializer& serializer)
6245{
6246 serde::Serializable<decltype(obj.destination)>::serialize(obj.destination, serializer);
6247 serde::Serializable<decltype(obj.bit_size)>::serialize(obj.bit_size, serializer);
6248 serde::Serializable<decltype(obj.value)>::serialize(obj.value, serializer);
6249}
6250
6251template <>
6252template <typename Deserializer>
6254{
6256 obj.destination = serde::Deserializable<decltype(obj.destination)>::deserialize(deserializer);
6257 obj.bit_size = serde::Deserializable<decltype(obj.bit_size)>::deserialize(deserializer);
6258 obj.value = serde::Deserializable<decltype(obj.value)>::deserialize(deserializer);
6259 return obj;
6260}
6261
6262namespace Acir {
6263
6265{
6266 if (!(lhs.destination_pointer == rhs.destination_pointer)) {
6267 return false;
6268 }
6269 if (!(lhs.bit_size == rhs.bit_size)) {
6270 return false;
6271 }
6272 if (!(lhs.value == rhs.value)) {
6273 return false;
6274 }
6275 return true;
6276}
6277
6278} // end of namespace Acir
6279
6280template <>
6281template <typename Serializer>
6283 Serializer& serializer)
6284{
6285 serde::Serializable<decltype(obj.destination_pointer)>::serialize(obj.destination_pointer, serializer);
6286 serde::Serializable<decltype(obj.bit_size)>::serialize(obj.bit_size, serializer);
6287 serde::Serializable<decltype(obj.value)>::serialize(obj.value, serializer);
6288}
6289
6290template <>
6291template <typename Deserializer>
6293 Deserializer& deserializer)
6294{
6296 obj.destination_pointer = serde::Deserializable<decltype(obj.destination_pointer)>::deserialize(deserializer);
6297 obj.bit_size = serde::Deserializable<decltype(obj.bit_size)>::deserialize(deserializer);
6298 obj.value = serde::Deserializable<decltype(obj.value)>::deserialize(deserializer);
6299 return obj;
6300}
6301
6302namespace Acir {
6303
6304inline bool operator==(const BrilligOpcode::Return& lhs, const BrilligOpcode::Return& rhs)
6305{
6306 return true;
6307}
6308
6309} // end of namespace Acir
6310
6311template <>
6312template <typename Serializer>
6316
6317template <>
6318template <typename Deserializer>
6324
6325namespace Acir {
6326
6328{
6329 if (!(lhs.function == rhs.function)) {
6330 return false;
6331 }
6332 if (!(lhs.destinations == rhs.destinations)) {
6333 return false;
6334 }
6336 return false;
6337 }
6338 if (!(lhs.inputs == rhs.inputs)) {
6339 return false;
6340 }
6341 if (!(lhs.input_value_types == rhs.input_value_types)) {
6342 return false;
6343 }
6344 return true;
6345}
6346
6347} // end of namespace Acir
6348
6349template <>
6350template <typename Serializer>
6352 Serializer& serializer)
6353{
6354 serde::Serializable<decltype(obj.function)>::serialize(obj.function, serializer);
6355 serde::Serializable<decltype(obj.destinations)>::serialize(obj.destinations, serializer);
6356 serde::Serializable<decltype(obj.destination_value_types)>::serialize(obj.destination_value_types, serializer);
6357 serde::Serializable<decltype(obj.inputs)>::serialize(obj.inputs, serializer);
6358 serde::Serializable<decltype(obj.input_value_types)>::serialize(obj.input_value_types, serializer);
6359}
6360
6361template <>
6362template <typename Deserializer>
6364 Deserializer& deserializer)
6365{
6367 obj.function = serde::Deserializable<decltype(obj.function)>::deserialize(deserializer);
6368 obj.destinations = serde::Deserializable<decltype(obj.destinations)>::deserialize(deserializer);
6370 serde::Deserializable<decltype(obj.destination_value_types)>::deserialize(deserializer);
6371 obj.inputs = serde::Deserializable<decltype(obj.inputs)>::deserialize(deserializer);
6372 obj.input_value_types = serde::Deserializable<decltype(obj.input_value_types)>::deserialize(deserializer);
6373 return obj;
6374}
6375
6376namespace Acir {
6377
6378inline bool operator==(const BrilligOpcode::Mov& lhs, const BrilligOpcode::Mov& rhs)
6379{
6380 if (!(lhs.destination == rhs.destination)) {
6381 return false;
6382 }
6383 if (!(lhs.source == rhs.source)) {
6384 return false;
6385 }
6386 return true;
6387}
6388
6389} // end of namespace Acir
6390
6391template <>
6392template <typename Serializer>
6394 Serializer& serializer)
6395{
6396 serde::Serializable<decltype(obj.destination)>::serialize(obj.destination, serializer);
6397 serde::Serializable<decltype(obj.source)>::serialize(obj.source, serializer);
6398}
6399
6400template <>
6401template <typename Deserializer>
6403{
6405 obj.destination = serde::Deserializable<decltype(obj.destination)>::deserialize(deserializer);
6406 obj.source = serde::Deserializable<decltype(obj.source)>::deserialize(deserializer);
6407 return obj;
6408}
6409
6410namespace Acir {
6411
6413{
6414 if (!(lhs.destination == rhs.destination)) {
6415 return false;
6416 }
6417 if (!(lhs.source_a == rhs.source_a)) {
6418 return false;
6419 }
6420 if (!(lhs.source_b == rhs.source_b)) {
6421 return false;
6422 }
6423 if (!(lhs.condition == rhs.condition)) {
6424 return false;
6425 }
6426 return true;
6427}
6428
6429} // end of namespace Acir
6430
6431template <>
6432template <typename Serializer>
6434 Serializer& serializer)
6435{
6436 serde::Serializable<decltype(obj.destination)>::serialize(obj.destination, serializer);
6437 serde::Serializable<decltype(obj.source_a)>::serialize(obj.source_a, serializer);
6438 serde::Serializable<decltype(obj.source_b)>::serialize(obj.source_b, serializer);
6439 serde::Serializable<decltype(obj.condition)>::serialize(obj.condition, serializer);
6440}
6441
6442template <>
6443template <typename Deserializer>
6445 Deserializer& deserializer)
6446{
6448 obj.destination = serde::Deserializable<decltype(obj.destination)>::deserialize(deserializer);
6449 obj.source_a = serde::Deserializable<decltype(obj.source_a)>::deserialize(deserializer);
6450 obj.source_b = serde::Deserializable<decltype(obj.source_b)>::deserialize(deserializer);
6451 obj.condition = serde::Deserializable<decltype(obj.condition)>::deserialize(deserializer);
6452 return obj;
6453}
6454
6455namespace Acir {
6456
6457inline bool operator==(const BrilligOpcode::Load& lhs, const BrilligOpcode::Load& rhs)
6458{
6459 if (!(lhs.destination == rhs.destination)) {
6460 return false;
6461 }
6462 if (!(lhs.source_pointer == rhs.source_pointer)) {
6463 return false;
6464 }
6465 return true;
6466}
6467
6468} // end of namespace Acir
6469
6470template <>
6471template <typename Serializer>
6473 Serializer& serializer)
6474{
6475 serde::Serializable<decltype(obj.destination)>::serialize(obj.destination, serializer);
6476 serde::Serializable<decltype(obj.source_pointer)>::serialize(obj.source_pointer, serializer);
6477}
6478
6479template <>
6480template <typename Deserializer>
6482{
6484 obj.destination = serde::Deserializable<decltype(obj.destination)>::deserialize(deserializer);
6485 obj.source_pointer = serde::Deserializable<decltype(obj.source_pointer)>::deserialize(deserializer);
6486 return obj;
6487}
6488
6489namespace Acir {
6490
6491inline bool operator==(const BrilligOpcode::Store& lhs, const BrilligOpcode::Store& rhs)
6492{
6493 if (!(lhs.destination_pointer == rhs.destination_pointer)) {
6494 return false;
6495 }
6496 if (!(lhs.source == rhs.source)) {
6497 return false;
6498 }
6499 return true;
6500}
6501
6502} // end of namespace Acir
6503
6504template <>
6505template <typename Serializer>
6507 Serializer& serializer)
6508{
6509 serde::Serializable<decltype(obj.destination_pointer)>::serialize(obj.destination_pointer, serializer);
6510 serde::Serializable<decltype(obj.source)>::serialize(obj.source, serializer);
6511}
6512
6513template <>
6514template <typename Deserializer>
6516{
6518 obj.destination_pointer = serde::Deserializable<decltype(obj.destination_pointer)>::deserialize(deserializer);
6519 obj.source = serde::Deserializable<decltype(obj.source)>::deserialize(deserializer);
6520 return obj;
6521}
6522
6523namespace Acir {
6524
6526{
6527 if (!(lhs.value == rhs.value)) {
6528 return false;
6529 }
6530 return true;
6531}
6532
6533} // end of namespace Acir
6534
6535template <>
6536template <typename Serializer>
6538 Serializer& serializer)
6539{
6540 serde::Serializable<decltype(obj.value)>::serialize(obj.value, serializer);
6541}
6542
6543template <>
6544template <typename Deserializer>
6546 Deserializer& deserializer)
6547{
6549 obj.value = serde::Deserializable<decltype(obj.value)>::deserialize(deserializer);
6550 return obj;
6551}
6552
6553namespace Acir {
6554
6555inline bool operator==(const BrilligOpcode::Trap& lhs, const BrilligOpcode::Trap& rhs)
6556{
6557 if (!(lhs.revert_data == rhs.revert_data)) {
6558 return false;
6559 }
6560 return true;
6561}
6562
6563} // end of namespace Acir
6564
6565template <>
6566template <typename Serializer>
6568 Serializer& serializer)
6569{
6570 serde::Serializable<decltype(obj.revert_data)>::serialize(obj.revert_data, serializer);
6571}
6572
6573template <>
6574template <typename Deserializer>
6576{
6578 obj.revert_data = serde::Deserializable<decltype(obj.revert_data)>::deserialize(deserializer);
6579 return obj;
6580}
6581
6582namespace Acir {
6583
6584inline bool operator==(const BrilligOpcode::Stop& lhs, const BrilligOpcode::Stop& rhs)
6585{
6586 if (!(lhs.return_data == rhs.return_data)) {
6587 return false;
6588 }
6589 return true;
6590}
6591
6592} // end of namespace Acir
6593
6594template <>
6595template <typename Serializer>
6597 Serializer& serializer)
6598{
6599 serde::Serializable<decltype(obj.return_data)>::serialize(obj.return_data, serializer);
6600}
6601
6602template <>
6603template <typename Deserializer>
6605{
6607 obj.return_data = serde::Deserializable<decltype(obj.return_data)>::deserialize(deserializer);
6608 return obj;
6609}
6610
6611namespace Acir {
6612
6613inline bool operator==(const BrilligOutputs& lhs, const BrilligOutputs& rhs)
6614{
6615 if (!(lhs.value == rhs.value)) {
6616 return false;
6617 }
6618 return true;
6619}
6620
6621} // end of namespace Acir
6622
6623template <>
6624template <typename Serializer>
6626{
6627 serializer.increase_container_depth();
6628 serde::Serializable<decltype(obj.value)>::serialize(obj.value, serializer);
6629 serializer.decrease_container_depth();
6630}
6631
6632template <>
6633template <typename Deserializer>
6635{
6636 deserializer.increase_container_depth();
6638 obj.value = serde::Deserializable<decltype(obj.value)>::deserialize(deserializer);
6639 deserializer.decrease_container_depth();
6640 return obj;
6641}
6642
6643namespace Acir {
6644
6646{
6647 if (!(lhs.value == rhs.value)) {
6648 return false;
6649 }
6650 return true;
6651}
6652
6653} // end of namespace Acir
6654
6655template <>
6656template <typename Serializer>
6658 Serializer& serializer)
6659{
6660 serde::Serializable<decltype(obj.value)>::serialize(obj.value, serializer);
6661}
6662
6663template <>
6664template <typename Deserializer>
6666 Deserializer& deserializer)
6667{
6669 obj.value = serde::Deserializable<decltype(obj.value)>::deserialize(deserializer);
6670 return obj;
6671}
6672
6673namespace Acir {
6674
6675inline bool operator==(const BrilligOutputs::Array& lhs, const BrilligOutputs::Array& rhs)
6676{
6677 if (!(lhs.value == rhs.value)) {
6678 return false;
6679 }
6680 return true;
6681}
6682
6683} // end of namespace Acir
6684
6685template <>
6686template <typename Serializer>
6688 Serializer& serializer)
6689{
6690 serde::Serializable<decltype(obj.value)>::serialize(obj.value, serializer);
6691}
6692
6693template <>
6694template <typename Deserializer>
6696{
6698 obj.value = serde::Deserializable<decltype(obj.value)>::deserialize(deserializer);
6699 return obj;
6700}
6701
6702namespace Acir {
6703
6704inline bool operator==(const Circuit& lhs, const Circuit& rhs)
6705{
6706 if (!(lhs.function_name == rhs.function_name)) {
6707 return false;
6708 }
6709 if (!(lhs.current_witness_index == rhs.current_witness_index)) {
6710 return false;
6711 }
6712 if (!(lhs.opcodes == rhs.opcodes)) {
6713 return false;
6714 }
6715 if (!(lhs.private_parameters == rhs.private_parameters)) {
6716 return false;
6717 }
6718 if (!(lhs.public_parameters == rhs.public_parameters)) {
6719 return false;
6720 }
6721 if (!(lhs.return_values == rhs.return_values)) {
6722 return false;
6723 }
6724 if (!(lhs.assert_messages == rhs.assert_messages)) {
6725 return false;
6726 }
6727 return true;
6728}
6729
6730} // end of namespace Acir
6731
6732template <>
6733template <typename Serializer>
6734void serde::Serializable<Acir::Circuit>::serialize(const Acir::Circuit& obj, Serializer& serializer)
6735{
6736 serializer.increase_container_depth();
6737 serde::Serializable<decltype(obj.function_name)>::serialize(obj.function_name, serializer);
6738 serde::Serializable<decltype(obj.current_witness_index)>::serialize(obj.current_witness_index, serializer);
6739 serde::Serializable<decltype(obj.opcodes)>::serialize(obj.opcodes, serializer);
6740 serde::Serializable<decltype(obj.private_parameters)>::serialize(obj.private_parameters, serializer);
6741 serde::Serializable<decltype(obj.public_parameters)>::serialize(obj.public_parameters, serializer);
6742 serde::Serializable<decltype(obj.return_values)>::serialize(obj.return_values, serializer);
6743 serde::Serializable<decltype(obj.assert_messages)>::serialize(obj.assert_messages, serializer);
6744 serializer.decrease_container_depth();
6745}
6746
6747template <>
6748template <typename Deserializer>
6750{
6751 deserializer.increase_container_depth();
6752 Acir::Circuit obj;
6753 obj.function_name = serde::Deserializable<decltype(obj.function_name)>::deserialize(deserializer);
6754 obj.current_witness_index = serde::Deserializable<decltype(obj.current_witness_index)>::deserialize(deserializer);
6755 obj.opcodes = serde::Deserializable<decltype(obj.opcodes)>::deserialize(deserializer);
6756 obj.private_parameters = serde::Deserializable<decltype(obj.private_parameters)>::deserialize(deserializer);
6757 obj.public_parameters = serde::Deserializable<decltype(obj.public_parameters)>::deserialize(deserializer);
6758 obj.return_values = serde::Deserializable<decltype(obj.return_values)>::deserialize(deserializer);
6759 obj.assert_messages = serde::Deserializable<decltype(obj.assert_messages)>::deserialize(deserializer);
6760 deserializer.decrease_container_depth();
6761 return obj;
6762}
6763
6764namespace Acir {
6765
6766inline bool operator==(const Expression& lhs, const Expression& rhs)
6767{
6768 if (!(lhs.mul_terms == rhs.mul_terms)) {
6769 return false;
6770 }
6771 if (!(lhs.linear_combinations == rhs.linear_combinations)) {
6772 return false;
6773 }
6774 if (!(lhs.q_c == rhs.q_c)) {
6775 return false;
6776 }
6777 return true;
6778}
6779
6780} // end of namespace Acir
6781
6782template <>
6783template <typename Serializer>
6785{
6786 serializer.increase_container_depth();
6787 serde::Serializable<decltype(obj.mul_terms)>::serialize(obj.mul_terms, serializer);
6788 serde::Serializable<decltype(obj.linear_combinations)>::serialize(obj.linear_combinations, serializer);
6789 serde::Serializable<decltype(obj.q_c)>::serialize(obj.q_c, serializer);
6790 serializer.decrease_container_depth();
6791}
6792
6793template <>
6794template <typename Deserializer>
6796{
6797 deserializer.increase_container_depth();
6798 Acir::Expression obj;
6799 obj.mul_terms = serde::Deserializable<decltype(obj.mul_terms)>::deserialize(deserializer);
6800 obj.linear_combinations = serde::Deserializable<decltype(obj.linear_combinations)>::deserialize(deserializer);
6801 obj.q_c = serde::Deserializable<decltype(obj.q_c)>::deserialize(deserializer);
6802 deserializer.decrease_container_depth();
6803 return obj;
6804}
6805
6806namespace Acir {
6807
6808inline bool operator==(const ExpressionOrMemory& lhs, const ExpressionOrMemory& rhs)
6809{
6810 if (!(lhs.value == rhs.value)) {
6811 return false;
6812 }
6813 return true;
6814}
6815
6816} // end of namespace Acir
6817
6818template <>
6819template <typename Serializer>
6821 Serializer& serializer)
6822{
6823 serializer.increase_container_depth();
6824 serde::Serializable<decltype(obj.value)>::serialize(obj.value, serializer);
6825 serializer.decrease_container_depth();
6826}
6827
6828template <>
6829template <typename Deserializer>
6831{
6832 deserializer.increase_container_depth();
6834 obj.value = serde::Deserializable<decltype(obj.value)>::deserialize(deserializer);
6835 deserializer.decrease_container_depth();
6836 return obj;
6837}
6838
6839namespace Acir {
6840
6842{
6843 if (!(lhs.value == rhs.value)) {
6844 return false;
6845 }
6846 return true;
6847}
6848
6849} // end of namespace Acir
6850
6851template <>
6852template <typename Serializer>
6854 const Acir::ExpressionOrMemory::Expression& obj, Serializer& serializer)
6855{
6856 serde::Serializable<decltype(obj.value)>::serialize(obj.value, serializer);
6857}
6858
6859template <>
6860template <typename Deserializer>
6862 Deserializer& deserializer)
6863{
6865 obj.value = serde::Deserializable<decltype(obj.value)>::deserialize(deserializer);
6866 return obj;
6867}
6868
6869namespace Acir {
6870
6872{
6873 if (!(lhs.value == rhs.value)) {
6874 return false;
6875 }
6876 return true;
6877}
6878
6879} // end of namespace Acir
6880
6881template <>
6882template <typename Serializer>
6884 Serializer& serializer)
6885{
6886 serde::Serializable<decltype(obj.value)>::serialize(obj.value, serializer);
6887}
6888
6889template <>
6890template <typename Deserializer>
6892 Deserializer& deserializer)
6893{
6895 obj.value = serde::Deserializable<decltype(obj.value)>::deserialize(deserializer);
6896 return obj;
6897}
6898
6899namespace Acir {
6900
6901inline bool operator==(const FunctionInput& lhs, const FunctionInput& rhs)
6902{
6903 if (!(lhs.value == rhs.value)) {
6904 return false;
6905 }
6906 return true;
6907}
6908
6909} // end of namespace Acir
6910
6911template <>
6912template <typename Serializer>
6914{
6915 serializer.increase_container_depth();
6916 serde::Serializable<decltype(obj.value)>::serialize(obj.value, serializer);
6917 serializer.decrease_container_depth();
6918}
6919
6920template <>
6921template <typename Deserializer>
6923{
6924 deserializer.increase_container_depth();
6926 obj.value = serde::Deserializable<decltype(obj.value)>::deserialize(deserializer);
6927 deserializer.decrease_container_depth();
6928 return obj;
6929}
6930
6931namespace Acir {
6932
6934{
6935 if (!(lhs.value == rhs.value)) {
6936 return false;
6937 }
6938 return true;
6939}
6940
6941} // end of namespace Acir
6942
6943template <>
6944template <typename Serializer>
6946 Serializer& serializer)
6947{
6948 serde::Serializable<decltype(obj.value)>::serialize(obj.value, serializer);
6949}
6950
6951template <>
6952template <typename Deserializer>
6954 Deserializer& deserializer)
6955{
6957 obj.value = serde::Deserializable<decltype(obj.value)>::deserialize(deserializer);
6958 return obj;
6959}
6960
6961namespace Acir {
6962
6964{
6965 if (!(lhs.value == rhs.value)) {
6966 return false;
6967 }
6968 return true;
6969}
6970
6971} // end of namespace Acir
6972
6973template <>
6974template <typename Serializer>
6976 Serializer& serializer)
6977{
6978 serde::Serializable<decltype(obj.value)>::serialize(obj.value, serializer);
6979}
6980
6981template <>
6982template <typename Deserializer>
6984 Deserializer& deserializer)
6985{
6987 obj.value = serde::Deserializable<decltype(obj.value)>::deserialize(deserializer);
6988 return obj;
6989}
6990
6991namespace Acir {
6992
6993inline bool operator==(const HeapArray& lhs, const HeapArray& rhs)
6994{
6995 if (!(lhs.pointer == rhs.pointer)) {
6996 return false;
6997 }
6998 if (!(lhs.size == rhs.size)) {
6999 return false;
7000 }
7001 return true;
7002}
7003
7004} // end of namespace Acir
7005
7006template <>
7007template <typename Serializer>
7009{
7010 serializer.increase_container_depth();
7011 serde::Serializable<decltype(obj.pointer)>::serialize(obj.pointer, serializer);
7012 serde::Serializable<decltype(obj.size)>::serialize(obj.size, serializer);
7013 serializer.decrease_container_depth();
7014}
7015
7016template <>
7017template <typename Deserializer>
7019{
7020 deserializer.increase_container_depth();
7021 Acir::HeapArray obj;
7022 obj.pointer = serde::Deserializable<decltype(obj.pointer)>::deserialize(deserializer);
7023 obj.size = serde::Deserializable<decltype(obj.size)>::deserialize(deserializer);
7024 deserializer.decrease_container_depth();
7025 return obj;
7026}
7027
7028namespace Acir {
7029
7030inline bool operator==(const HeapValueType& lhs, const HeapValueType& rhs)
7031{
7032 if (!(lhs.value == rhs.value)) {
7033 return false;
7034 }
7035 return true;
7036}
7037
7038} // end of namespace Acir
7039
7040template <>
7041template <typename Serializer>
7043{
7044 serializer.increase_container_depth();
7045 serde::Serializable<decltype(obj.value)>::serialize(obj.value, serializer);
7046 serializer.decrease_container_depth();
7047}
7048
7049template <>
7050template <typename Deserializer>
7052{
7053 deserializer.increase_container_depth();
7055 obj.value = serde::Deserializable<decltype(obj.value)>::deserialize(deserializer);
7056 deserializer.decrease_container_depth();
7057 return obj;
7058}
7059
7060namespace Acir {
7061
7062inline bool operator==(const HeapValueType::Simple& lhs, const HeapValueType::Simple& rhs)
7063{
7064 if (!(lhs.value == rhs.value)) {
7065 return false;
7066 }
7067 return true;
7068}
7069
7070} // end of namespace Acir
7071
7072template <>
7073template <typename Serializer>
7075 Serializer& serializer)
7076{
7077 serde::Serializable<decltype(obj.value)>::serialize(obj.value, serializer);
7078}
7079
7080template <>
7081template <typename Deserializer>
7083{
7085 obj.value = serde::Deserializable<decltype(obj.value)>::deserialize(deserializer);
7086 return obj;
7087}
7088
7089namespace Acir {
7090
7091inline bool operator==(const HeapValueType::Array& lhs, const HeapValueType::Array& rhs)
7092{
7093 if (!(lhs.value_types == rhs.value_types)) {
7094 return false;
7095 }
7096 if (!(lhs.size == rhs.size)) {
7097 return false;
7098 }
7099 return true;
7100}
7101
7102} // end of namespace Acir
7103
7104template <>
7105template <typename Serializer>
7107 Serializer& serializer)
7108{
7109 serde::Serializable<decltype(obj.value_types)>::serialize(obj.value_types, serializer);
7110 serde::Serializable<decltype(obj.size)>::serialize(obj.size, serializer);
7111}
7112
7113template <>
7114template <typename Deserializer>
7116{
7118 obj.value_types = serde::Deserializable<decltype(obj.value_types)>::deserialize(deserializer);
7119 obj.size = serde::Deserializable<decltype(obj.size)>::deserialize(deserializer);
7120 return obj;
7121}
7122
7123namespace Acir {
7124
7125inline bool operator==(const HeapValueType::Vector& lhs, const HeapValueType::Vector& rhs)
7126{
7127 if (!(lhs.value_types == rhs.value_types)) {
7128 return false;
7129 }
7130 return true;
7131}
7132
7133} // end of namespace Acir
7134
7135template <>
7136template <typename Serializer>
7138 Serializer& serializer)
7139{
7140 serde::Serializable<decltype(obj.value_types)>::serialize(obj.value_types, serializer);
7141}
7142
7143template <>
7144template <typename Deserializer>
7146{
7148 obj.value_types = serde::Deserializable<decltype(obj.value_types)>::deserialize(deserializer);
7149 return obj;
7150}
7151
7152namespace Acir {
7153
7154inline bool operator==(const HeapVector& lhs, const HeapVector& rhs)
7155{
7156 if (!(lhs.pointer == rhs.pointer)) {
7157 return false;
7158 }
7159 if (!(lhs.size == rhs.size)) {
7160 return false;
7161 }
7162 return true;
7163}
7164
7165} // end of namespace Acir
7166
7167template <>
7168template <typename Serializer>
7170{
7171 serializer.increase_container_depth();
7172 serde::Serializable<decltype(obj.pointer)>::serialize(obj.pointer, serializer);
7173 serde::Serializable<decltype(obj.size)>::serialize(obj.size, serializer);
7174 serializer.decrease_container_depth();
7175}
7176
7177template <>
7178template <typename Deserializer>
7180{
7181 deserializer.increase_container_depth();
7182 Acir::HeapVector obj;
7183 obj.pointer = serde::Deserializable<decltype(obj.pointer)>::deserialize(deserializer);
7184 obj.size = serde::Deserializable<decltype(obj.size)>::deserialize(deserializer);
7185 deserializer.decrease_container_depth();
7186 return obj;
7187}
7188
7189namespace Acir {
7190
7191inline bool operator==(const IntegerBitSize& lhs, const IntegerBitSize& rhs)
7192{
7193 if (!(lhs.value == rhs.value)) {
7194 return false;
7195 }
7196 return true;
7197}
7198
7199} // end of namespace Acir
7200
7201template <>
7202template <typename Serializer>
7204{
7205 serializer.increase_container_depth();
7206 serde::Serializable<decltype(obj.value)>::serialize(obj.value, serializer);
7207 serializer.decrease_container_depth();
7208}
7209
7210template <>
7211template <typename Deserializer>
7213{
7214 deserializer.increase_container_depth();
7216 obj.value = serde::Deserializable<decltype(obj.value)>::deserialize(deserializer);
7217 deserializer.decrease_container_depth();
7218 return obj;
7219}
7220
7221namespace Acir {
7222
7223inline bool operator==(const IntegerBitSize::U1& lhs, const IntegerBitSize::U1& rhs)
7224{
7225 return true;
7226}
7227
7228} // end of namespace Acir
7229
7230template <>
7231template <typename Serializer>
7235
7236template <>
7237template <typename Deserializer>
7243
7244namespace Acir {
7245
7246inline bool operator==(const IntegerBitSize::U8& lhs, const IntegerBitSize::U8& rhs)
7247{
7248 return true;
7249}
7250
7251} // end of namespace Acir
7252
7253template <>
7254template <typename Serializer>
7258
7259template <>
7260template <typename Deserializer>
7266
7267namespace Acir {
7268
7269inline bool operator==(const IntegerBitSize::U16& lhs, const IntegerBitSize::U16& rhs)
7270{
7271 return true;
7272}
7273
7274} // end of namespace Acir
7275
7276template <>
7277template <typename Serializer>
7281
7282template <>
7283template <typename Deserializer>
7289
7290namespace Acir {
7291
7292inline bool operator==(const IntegerBitSize::U32& lhs, const IntegerBitSize::U32& rhs)
7293{
7294 return true;
7295}
7296
7297} // end of namespace Acir
7298
7299template <>
7300template <typename Serializer>
7304
7305template <>
7306template <typename Deserializer>
7312
7313namespace Acir {
7314
7315inline bool operator==(const IntegerBitSize::U64& lhs, const IntegerBitSize::U64& rhs)
7316{
7317 return true;
7318}
7319
7320} // end of namespace Acir
7321
7322template <>
7323template <typename Serializer>
7327
7328template <>
7329template <typename Deserializer>
7335
7336namespace Acir {
7337
7338inline bool operator==(const IntegerBitSize::U128& lhs, const IntegerBitSize::U128& rhs)
7339{
7340 return true;
7341}
7342
7343} // end of namespace Acir
7344
7345template <>
7346template <typename Serializer>
7350
7351template <>
7352template <typename Deserializer>
7358
7359namespace Acir {
7360
7361inline bool operator==(const MemOp& lhs, const MemOp& rhs)
7362{
7363 if (!(lhs.operation == rhs.operation)) {
7364 return false;
7365 }
7366 if (!(lhs.index == rhs.index)) {
7367 return false;
7368 }
7369 if (!(lhs.value == rhs.value)) {
7370 return false;
7371 }
7372 return true;
7373}
7374
7375} // end of namespace Acir
7376
7377template <>
7378template <typename Serializer>
7379void serde::Serializable<Acir::MemOp>::serialize(const Acir::MemOp& obj, Serializer& serializer)
7380{
7381 serializer.increase_container_depth();
7382 serde::Serializable<decltype(obj.operation)>::serialize(obj.operation, serializer);
7383 serde::Serializable<decltype(obj.index)>::serialize(obj.index, serializer);
7384 serde::Serializable<decltype(obj.value)>::serialize(obj.value, serializer);
7385 serializer.decrease_container_depth();
7386}
7387
7388template <>
7389template <typename Deserializer>
7391{
7392 deserializer.increase_container_depth();
7393 Acir::MemOp obj;
7394 obj.operation = serde::Deserializable<decltype(obj.operation)>::deserialize(deserializer);
7395 obj.index = serde::Deserializable<decltype(obj.index)>::deserialize(deserializer);
7396 obj.value = serde::Deserializable<decltype(obj.value)>::deserialize(deserializer);
7397 deserializer.decrease_container_depth();
7398 return obj;
7399}
7400
7401namespace Acir {
7402
7403inline bool operator==(const MemoryAddress& lhs, const MemoryAddress& rhs)
7404{
7405 if (!(lhs.value == rhs.value)) {
7406 return false;
7407 }
7408 return true;
7409}
7410
7411} // end of namespace Acir
7412
7413template <>
7414template <typename Serializer>
7416{
7417 serializer.increase_container_depth();
7418 serde::Serializable<decltype(obj.value)>::serialize(obj.value, serializer);
7419 serializer.decrease_container_depth();
7420}
7421
7422template <>
7423template <typename Deserializer>
7425{
7426 deserializer.increase_container_depth();
7428 obj.value = serde::Deserializable<decltype(obj.value)>::deserialize(deserializer);
7429 deserializer.decrease_container_depth();
7430 return obj;
7431}
7432
7433namespace Acir {
7434
7435inline bool operator==(const MemoryAddress::Direct& lhs, const MemoryAddress::Direct& rhs)
7436{
7437 if (!(lhs.value == rhs.value)) {
7438 return false;
7439 }
7440 return true;
7441}
7442
7443} // end of namespace Acir
7444
7445template <>
7446template <typename Serializer>
7448 Serializer& serializer)
7449{
7450 serde::Serializable<decltype(obj.value)>::serialize(obj.value, serializer);
7451}
7452
7453template <>
7454template <typename Deserializer>
7456{
7458 obj.value = serde::Deserializable<decltype(obj.value)>::deserialize(deserializer);
7459 return obj;
7460}
7461
7462namespace Acir {
7463
7465{
7466 if (!(lhs.value == rhs.value)) {
7467 return false;
7468 }
7469 return true;
7470}
7471
7472} // end of namespace Acir
7473
7474template <>
7475template <typename Serializer>
7477 Serializer& serializer)
7478{
7479 serde::Serializable<decltype(obj.value)>::serialize(obj.value, serializer);
7480}
7481
7482template <>
7483template <typename Deserializer>
7485 Deserializer& deserializer)
7486{
7488 obj.value = serde::Deserializable<decltype(obj.value)>::deserialize(deserializer);
7489 return obj;
7490}
7491
7492namespace Acir {
7493
7494inline bool operator==(const Opcode& lhs, const Opcode& rhs)
7495{
7496 if (!(lhs.value == rhs.value)) {
7497 return false;
7498 }
7499 return true;
7500}
7501
7502} // end of namespace Acir
7503
7504template <>
7505template <typename Serializer>
7506void serde::Serializable<Acir::Opcode>::serialize(const Acir::Opcode& obj, Serializer& serializer)
7507{
7508 serializer.increase_container_depth();
7509 serde::Serializable<decltype(obj.value)>::serialize(obj.value, serializer);
7510 serializer.decrease_container_depth();
7511}
7512
7513template <>
7514template <typename Deserializer>
7516{
7517 deserializer.increase_container_depth();
7518 Acir::Opcode obj;
7519 obj.value = serde::Deserializable<decltype(obj.value)>::deserialize(deserializer);
7520 deserializer.decrease_container_depth();
7521 return obj;
7522}
7523
7524namespace Acir {
7525
7526inline bool operator==(const Opcode::AssertZero& lhs, const Opcode::AssertZero& rhs)
7527{
7528 if (!(lhs.value == rhs.value)) {
7529 return false;
7530 }
7531 return true;
7532}
7533
7534} // end of namespace Acir
7535
7536template <>
7537template <typename Serializer>
7539 Serializer& serializer)
7540{
7541 serde::Serializable<decltype(obj.value)>::serialize(obj.value, serializer);
7542}
7543
7544template <>
7545template <typename Deserializer>
7547{
7549 obj.value = serde::Deserializable<decltype(obj.value)>::deserialize(deserializer);
7550 return obj;
7551}
7552
7553namespace Acir {
7554
7556{
7557 if (!(lhs.value == rhs.value)) {
7558 return false;
7559 }
7560 return true;
7561}
7562
7563} // end of namespace Acir
7564
7565template <>
7566template <typename Serializer>
7568 Serializer& serializer)
7569{
7570 serde::Serializable<decltype(obj.value)>::serialize(obj.value, serializer);
7571}
7572
7573template <>
7574template <typename Deserializer>
7576 Deserializer& deserializer)
7577{
7579 obj.value = serde::Deserializable<decltype(obj.value)>::deserialize(deserializer);
7580 return obj;
7581}
7582
7583namespace Acir {
7584
7585inline bool operator==(const Opcode::MemoryOp& lhs, const Opcode::MemoryOp& rhs)
7586{
7587 if (!(lhs.block_id == rhs.block_id)) {
7588 return false;
7589 }
7590 if (!(lhs.op == rhs.op)) {
7591 return false;
7592 }
7593 return true;
7594}
7595
7596} // end of namespace Acir
7597
7598template <>
7599template <typename Serializer>
7601{
7602 serde::Serializable<decltype(obj.block_id)>::serialize(obj.block_id, serializer);
7603 serde::Serializable<decltype(obj.op)>::serialize(obj.op, serializer);
7604}
7605
7606template <>
7607template <typename Deserializer>
7609{
7611 obj.block_id = serde::Deserializable<decltype(obj.block_id)>::deserialize(deserializer);
7612 obj.op = serde::Deserializable<decltype(obj.op)>::deserialize(deserializer);
7613 return obj;
7614}
7615
7616namespace Acir {
7617
7618inline bool operator==(const Opcode::MemoryInit& lhs, const Opcode::MemoryInit& rhs)
7619{
7620 if (!(lhs.block_id == rhs.block_id)) {
7621 return false;
7622 }
7623 if (!(lhs.init == rhs.init)) {
7624 return false;
7625 }
7626 if (!(lhs.block_type == rhs.block_type)) {
7627 return false;
7628 }
7629 return true;
7630}
7631
7632} // end of namespace Acir
7633
7634template <>
7635template <typename Serializer>
7637 Serializer& serializer)
7638{
7639 serde::Serializable<decltype(obj.block_id)>::serialize(obj.block_id, serializer);
7640 serde::Serializable<decltype(obj.init)>::serialize(obj.init, serializer);
7641 serde::Serializable<decltype(obj.block_type)>::serialize(obj.block_type, serializer);
7642}
7643
7644template <>
7645template <typename Deserializer>
7647{
7649 obj.block_id = serde::Deserializable<decltype(obj.block_id)>::deserialize(deserializer);
7650 obj.init = serde::Deserializable<decltype(obj.init)>::deserialize(deserializer);
7651 obj.block_type = serde::Deserializable<decltype(obj.block_type)>::deserialize(deserializer);
7652 return obj;
7653}
7654
7655namespace Acir {
7656
7657inline bool operator==(const Opcode::BrilligCall& lhs, const Opcode::BrilligCall& rhs)
7658{
7659 if (!(lhs.id == rhs.id)) {
7660 return false;
7661 }
7662 if (!(lhs.inputs == rhs.inputs)) {
7663 return false;
7664 }
7665 if (!(lhs.outputs == rhs.outputs)) {
7666 return false;
7667 }
7668 if (!(lhs.predicate == rhs.predicate)) {
7669 return false;
7670 }
7671 return true;
7672}
7673
7674} // end of namespace Acir
7675
7676template <>
7677template <typename Serializer>
7679 Serializer& serializer)
7680{
7681 serde::Serializable<decltype(obj.id)>::serialize(obj.id, serializer);
7682 serde::Serializable<decltype(obj.inputs)>::serialize(obj.inputs, serializer);
7683 serde::Serializable<decltype(obj.outputs)>::serialize(obj.outputs, serializer);
7684 serde::Serializable<decltype(obj.predicate)>::serialize(obj.predicate, serializer);
7685}
7686
7687template <>
7688template <typename Deserializer>
7690{
7692 obj.id = serde::Deserializable<decltype(obj.id)>::deserialize(deserializer);
7693 obj.inputs = serde::Deserializable<decltype(obj.inputs)>::deserialize(deserializer);
7694 obj.outputs = serde::Deserializable<decltype(obj.outputs)>::deserialize(deserializer);
7695 obj.predicate = serde::Deserializable<decltype(obj.predicate)>::deserialize(deserializer);
7696 return obj;
7697}
7698
7699namespace Acir {
7700
7701inline bool operator==(const Opcode::Call& lhs, const Opcode::Call& rhs)
7702{
7703 if (!(lhs.id == rhs.id)) {
7704 return false;
7705 }
7706 if (!(lhs.inputs == rhs.inputs)) {
7707 return false;
7708 }
7709 if (!(lhs.outputs == rhs.outputs)) {
7710 return false;
7711 }
7712 if (!(lhs.predicate == rhs.predicate)) {
7713 return false;
7714 }
7715 return true;
7716}
7717
7718} // end of namespace Acir
7719
7720template <>
7721template <typename Serializer>
7723{
7724 serde::Serializable<decltype(obj.id)>::serialize(obj.id, serializer);
7725 serde::Serializable<decltype(obj.inputs)>::serialize(obj.inputs, serializer);
7726 serde::Serializable<decltype(obj.outputs)>::serialize(obj.outputs, serializer);
7727 serde::Serializable<decltype(obj.predicate)>::serialize(obj.predicate, serializer);
7728}
7729
7730template <>
7731template <typename Deserializer>
7733{
7735 obj.id = serde::Deserializable<decltype(obj.id)>::deserialize(deserializer);
7736 obj.inputs = serde::Deserializable<decltype(obj.inputs)>::deserialize(deserializer);
7737 obj.outputs = serde::Deserializable<decltype(obj.outputs)>::deserialize(deserializer);
7738 obj.predicate = serde::Deserializable<decltype(obj.predicate)>::deserialize(deserializer);
7739 return obj;
7740}
7741
7742namespace Acir {
7743
7744inline bool operator==(const OpcodeLocation& lhs, const OpcodeLocation& rhs)
7745{
7746 if (!(lhs.value == rhs.value)) {
7747 return false;
7748 }
7749 return true;
7750}
7751
7752} // end of namespace Acir
7753
7754template <>
7755template <typename Serializer>
7757{
7758 serializer.increase_container_depth();
7759 serde::Serializable<decltype(obj.value)>::serialize(obj.value, serializer);
7760 serializer.decrease_container_depth();
7761}
7762
7763template <>
7764template <typename Deserializer>
7766{
7767 deserializer.increase_container_depth();
7769 obj.value = serde::Deserializable<decltype(obj.value)>::deserialize(deserializer);
7770 deserializer.decrease_container_depth();
7771 return obj;
7772}
7773
7774namespace Acir {
7775
7776inline bool operator==(const OpcodeLocation::Acir& lhs, const OpcodeLocation::Acir& rhs)
7777{
7778 if (!(lhs.value == rhs.value)) {
7779 return false;
7780 }
7781 return true;
7782}
7783
7784} // end of namespace Acir
7785
7786template <>
7787template <typename Serializer>
7789 Serializer& serializer)
7790{
7791 serde::Serializable<decltype(obj.value)>::serialize(obj.value, serializer);
7792}
7793
7794template <>
7795template <typename Deserializer>
7797{
7799 obj.value = serde::Deserializable<decltype(obj.value)>::deserialize(deserializer);
7800 return obj;
7801}
7802
7803namespace Acir {
7804
7806{
7807 if (!(lhs.acir_index == rhs.acir_index)) {
7808 return false;
7809 }
7810 if (!(lhs.brillig_index == rhs.brillig_index)) {
7811 return false;
7812 }
7813 return true;
7814}
7815
7816} // end of namespace Acir
7817
7818template <>
7819template <typename Serializer>
7821 Serializer& serializer)
7822{
7823 serde::Serializable<decltype(obj.acir_index)>::serialize(obj.acir_index, serializer);
7824 serde::Serializable<decltype(obj.brillig_index)>::serialize(obj.brillig_index, serializer);
7825}
7826
7827template <>
7828template <typename Deserializer>
7830 Deserializer& deserializer)
7831{
7833 obj.acir_index = serde::Deserializable<decltype(obj.acir_index)>::deserialize(deserializer);
7834 obj.brillig_index = serde::Deserializable<decltype(obj.brillig_index)>::deserialize(deserializer);
7835 return obj;
7836}
7837
7838namespace Acir {
7839
7840inline bool operator==(const Program& lhs, const Program& rhs)
7841{
7842 if (!(lhs.functions == rhs.functions)) {
7843 return false;
7844 }
7846 return false;
7847 }
7848 return true;
7849}
7850
7851} // end of namespace Acir
7852
7853template <>
7854template <typename Serializer>
7855void serde::Serializable<Acir::Program>::serialize(const Acir::Program& obj, Serializer& serializer)
7856{
7857 serializer.increase_container_depth();
7858 serde::Serializable<decltype(obj.functions)>::serialize(obj.functions, serializer);
7859 serde::Serializable<decltype(obj.unconstrained_functions)>::serialize(obj.unconstrained_functions, serializer);
7860 serializer.decrease_container_depth();
7861}
7862
7863template <>
7864template <typename Deserializer>
7866{
7867 deserializer.increase_container_depth();
7868 Acir::Program obj;
7869 obj.functions = serde::Deserializable<decltype(obj.functions)>::deserialize(deserializer);
7871 serde::Deserializable<decltype(obj.unconstrained_functions)>::deserialize(deserializer);
7872 deserializer.decrease_container_depth();
7873 return obj;
7874}
7875
7876namespace Acir {
7877
7878inline bool operator==(const ProgramWithoutBrillig& lhs, const ProgramWithoutBrillig& rhs)
7879{
7880 if (!(lhs.functions == rhs.functions)) {
7881 return false;
7882 }
7884 return false;
7885 }
7886 return true;
7887}
7888
7889} // end of namespace Acir
7890
7891template <>
7892template <typename Serializer>
7894 Serializer& serializer)
7895{
7896 serializer.increase_container_depth();
7897 serde::Serializable<decltype(obj.functions)>::serialize(obj.functions, serializer);
7898 serde::Serializable<decltype(obj.unconstrained_functions)>::serialize(obj.unconstrained_functions, serializer);
7899 serializer.decrease_container_depth();
7900}
7901
7902template <>
7903template <typename Deserializer>
7905{
7906 deserializer.increase_container_depth();
7908 obj.functions = serde::Deserializable<decltype(obj.functions)>::deserialize(deserializer);
7910 serde::Deserializable<decltype(obj.unconstrained_functions)>::deserialize(deserializer);
7911 deserializer.decrease_container_depth();
7912 return obj;
7913}
7914
7915namespace Acir {
7916
7917inline bool operator==(const PublicInputs& lhs, const PublicInputs& rhs)
7918{
7919 if (!(lhs.value == rhs.value)) {
7920 return false;
7921 }
7922 return true;
7923}
7924
7925} // end of namespace Acir
7926
7927template <>
7928template <typename Serializer>
7930{
7931 serializer.increase_container_depth();
7932 serde::Serializable<decltype(obj.value)>::serialize(obj.value, serializer);
7933 serializer.decrease_container_depth();
7934}
7935
7936template <>
7937template <typename Deserializer>
7939{
7940 deserializer.increase_container_depth();
7942 obj.value = serde::Deserializable<decltype(obj.value)>::deserialize(deserializer);
7943 deserializer.decrease_container_depth();
7944 return obj;
7945}
7946
7947namespace Acir {
7948
7949inline bool operator==(const SemanticLength& lhs, const SemanticLength& rhs)
7950{
7951 if (!(lhs.value == rhs.value)) {
7952 return false;
7953 }
7954 return true;
7955}
7956
7957} // end of namespace Acir
7958
7959template <>
7960template <typename Serializer>
7962{
7963 serializer.increase_container_depth();
7964 serde::Serializable<decltype(obj.value)>::serialize(obj.value, serializer);
7965 serializer.decrease_container_depth();
7966}
7967
7968template <>
7969template <typename Deserializer>
7971{
7972 deserializer.increase_container_depth();
7974 obj.value = serde::Deserializable<decltype(obj.value)>::deserialize(deserializer);
7975 deserializer.decrease_container_depth();
7976 return obj;
7977}
7978
7979namespace Acir {
7980
7981inline bool operator==(const SemiFlattenedLength& lhs, const SemiFlattenedLength& rhs)
7982{
7983 if (!(lhs.value == rhs.value)) {
7984 return false;
7985 }
7986 return true;
7987}
7988
7989} // end of namespace Acir
7990
7991template <>
7992template <typename Serializer>
7994 Serializer& serializer)
7995{
7996 serializer.increase_container_depth();
7997 serde::Serializable<decltype(obj.value)>::serialize(obj.value, serializer);
7998 serializer.decrease_container_depth();
7999}
8000
8001template <>
8002template <typename Deserializer>
8004{
8005 deserializer.increase_container_depth();
8007 obj.value = serde::Deserializable<decltype(obj.value)>::deserialize(deserializer);
8008 deserializer.decrease_container_depth();
8009 return obj;
8010}
8011
8012namespace Acir {
8013
8014inline bool operator==(const ValueOrArray& lhs, const ValueOrArray& rhs)
8015{
8016 if (!(lhs.value == rhs.value)) {
8017 return false;
8018 }
8019 return true;
8020}
8021
8022} // end of namespace Acir
8023
8024template <>
8025template <typename Serializer>
8027{
8028 serializer.increase_container_depth();
8029 serde::Serializable<decltype(obj.value)>::serialize(obj.value, serializer);
8030 serializer.decrease_container_depth();
8031}
8032
8033template <>
8034template <typename Deserializer>
8036{
8037 deserializer.increase_container_depth();
8039 obj.value = serde::Deserializable<decltype(obj.value)>::deserialize(deserializer);
8040 deserializer.decrease_container_depth();
8041 return obj;
8042}
8043
8044namespace Acir {
8045
8047{
8048 if (!(lhs.value == rhs.value)) {
8049 return false;
8050 }
8051 return true;
8052}
8053
8054} // end of namespace Acir
8055
8056template <>
8057template <typename Serializer>
8059 Serializer& serializer)
8060{
8061 serde::Serializable<decltype(obj.value)>::serialize(obj.value, serializer);
8062}
8063
8064template <>
8065template <typename Deserializer>
8067 Deserializer& deserializer)
8068{
8070 obj.value = serde::Deserializable<decltype(obj.value)>::deserialize(deserializer);
8071 return obj;
8072}
8073
8074namespace Acir {
8075
8077{
8078 if (!(lhs.value == rhs.value)) {
8079 return false;
8080 }
8081 return true;
8082}
8083
8084} // end of namespace Acir
8085
8086template <>
8087template <typename Serializer>
8089 Serializer& serializer)
8090{
8091 serde::Serializable<decltype(obj.value)>::serialize(obj.value, serializer);
8092}
8093
8094template <>
8095template <typename Deserializer>
8097 Deserializer& deserializer)
8098{
8100 obj.value = serde::Deserializable<decltype(obj.value)>::deserialize(deserializer);
8101 return obj;
8102}
8103
8104namespace Acir {
8105
8107{
8108 if (!(lhs.value == rhs.value)) {
8109 return false;
8110 }
8111 return true;
8112}
8113
8114} // end of namespace Acir
8115
8116template <>
8117template <typename Serializer>
8119 Serializer& serializer)
8120{
8121 serde::Serializable<decltype(obj.value)>::serialize(obj.value, serializer);
8122}
8123
8124template <>
8125template <typename Deserializer>
8127 Deserializer& deserializer)
8128{
8130 obj.value = serde::Deserializable<decltype(obj.value)>::deserialize(deserializer);
8131 return obj;
8132}
8133
8134namespace Acir {
8135
8136inline bool operator==(const Witness& lhs, const Witness& rhs)
8137{
8138 if (!(lhs.value == rhs.value)) {
8139 return false;
8140 }
8141 return true;
8142}
8143
8144} // end of namespace Acir
8145
8146template <>
8147template <typename Serializer>
8148void serde::Serializable<Acir::Witness>::serialize(const Acir::Witness& obj, Serializer& serializer)
8149{
8150 serializer.increase_container_depth();
8151 serde::Serializable<decltype(obj.value)>::serialize(obj.value, serializer);
8152 serializer.decrease_container_depth();
8153}
8154
8155template <>
8156template <typename Deserializer>
8158{
8159 deserializer.increase_container_depth();
8160 Acir::Witness obj;
8161 obj.value = serde::Deserializable<decltype(obj.value)>::deserialize(deserializer);
8162 deserializer.decrease_container_depth();
8163 return obj;
8164}
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:3814
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:3568
std::vector< Acir::ExpressionOrMemory > payload
Definition acir.hpp:3569
friend bool operator==(const AssertionPayload &, const AssertionPayload &)
Definition acir.hpp:3814
void msgpack_unpack(msgpack::object const &o)
Definition acir.hpp:3573
void msgpack_unpack(msgpack::object const &o)
Definition acir.hpp:74
friend bool operator==(const Add &, const Add &)
Definition acir.hpp:3883
void msgpack_unpack(msgpack::object const &o)
Definition acir.hpp:92
friend bool operator==(const Div &, const Div &)
Definition acir.hpp:3952
void msgpack_unpack(msgpack::object const &o)
Definition acir.hpp:104
friend bool operator==(const Equals &, const Equals &)
Definition acir.hpp:3999
friend bool operator==(const IntegerDiv &, const IntegerDiv &)
Definition acir.hpp:3975
void msgpack_unpack(msgpack::object const &o)
Definition acir.hpp:98
friend bool operator==(const LessThanEquals &, const LessThanEquals &)
Definition acir.hpp:4046
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:4022
void msgpack_unpack(msgpack::object const &o)
Definition acir.hpp:86
friend bool operator==(const Mul &, const Mul &)
Definition acir.hpp:3929
void msgpack_unpack(msgpack::object const &o)
Definition acir.hpp:80
friend bool operator==(const Sub &, const Sub &)
Definition acir.hpp:3906
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:3851
void msgpack_unpack(msgpack::object const &o)
Definition acir.hpp:180
friend bool operator==(const Add &, const Add &)
Definition acir.hpp:4102
friend bool operator==(const And &, const And &)
Definition acir.hpp:4260
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:4168
void msgpack_unpack(msgpack::object const &o)
Definition acir.hpp:204
friend bool operator==(const Equals &, const Equals &)
Definition acir.hpp:4190
friend bool operator==(const LessThanEquals &, const LessThanEquals &)
Definition acir.hpp:4236
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:4213
friend bool operator==(const Mul &, const Mul &)
Definition acir.hpp:4146
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:4282
friend bool operator==(const Shl &, const Shl &)
Definition acir.hpp:4326
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:4348
void msgpack_unpack(msgpack::object const &o)
Definition acir.hpp:186
friend bool operator==(const Sub &, const Sub &)
Definition acir.hpp:4124
friend bool operator==(const Xor &, const Xor &)
Definition acir.hpp:4304
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:4070
friend bool operator==(const Field &, const Field &)
Definition acir.hpp:4402
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:4424
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:4370
void msgpack_unpack(msgpack::object const &o)
Definition acir.hpp:433
std::shared_ptr< std::array< Acir::FunctionInput, 16 > > key
Definition acir.hpp:2246
std::vector< Acir::Witness > outputs
Definition acir.hpp:2247
std::vector< Acir::FunctionInput > inputs
Definition acir.hpp:2244
friend bool operator==(const AES128Encrypt &, const AES128Encrypt &)
Definition acir.hpp:4484
void msgpack_unpack(msgpack::object const &o)
Definition acir.hpp:2251
std::shared_ptr< std::array< Acir::FunctionInput, 16 > > iv
Definition acir.hpp:2245
friend bool operator==(const AND &, const AND &)
Definition acir.hpp:4529
Acir::FunctionInput lhs
Definition acir.hpp:2273
void msgpack_unpack(msgpack::object const &o)
Definition acir.hpp:2280
Acir::FunctionInput rhs
Definition acir.hpp:2274
std::shared_ptr< std::array< Acir::Witness, 32 > > outputs
Definition acir.hpp:2355
friend bool operator==(const Blake2s &, const Blake2s &)
Definition acir.hpp:4652
std::vector< Acir::FunctionInput > inputs
Definition acir.hpp:2354
void msgpack_unpack(msgpack::object const &o)
Definition acir.hpp:2359
void msgpack_unpack(msgpack::object const &o)
Definition acir.hpp:2382
std::shared_ptr< std::array< Acir::Witness, 32 > > outputs
Definition acir.hpp:2378
std::vector< Acir::FunctionInput > inputs
Definition acir.hpp:2377
friend bool operator==(const Blake3 &, const Blake3 &)
Definition acir.hpp:4687
std::shared_ptr< std::array< Acir::FunctionInput, 32 > > public_key_x
Definition acir.hpp:2400
std::shared_ptr< std::array< Acir::FunctionInput, 32 > > hashed_message
Definition acir.hpp:2403
friend bool operator==(const EcdsaSecp256k1 &, const EcdsaSecp256k1 &)
Definition acir.hpp:4722
std::shared_ptr< std::array< Acir::FunctionInput, 32 > > public_key_y
Definition acir.hpp:2401
void msgpack_unpack(msgpack::object const &o)
Definition acir.hpp:2409
std::shared_ptr< std::array< Acir::FunctionInput, 64 > > signature
Definition acir.hpp:2402
std::shared_ptr< std::array< Acir::FunctionInput, 32 > > public_key_x
Definition acir.hpp:2435
friend bool operator==(const EcdsaSecp256r1 &, const EcdsaSecp256r1 &)
Definition acir.hpp:4777
void msgpack_unpack(msgpack::object const &o)
Definition acir.hpp:2444
std::shared_ptr< std::array< Acir::FunctionInput, 32 > > hashed_message
Definition acir.hpp:2438
std::shared_ptr< std::array< Acir::FunctionInput, 32 > > public_key_y
Definition acir.hpp:2436
std::shared_ptr< std::array< Acir::FunctionInput, 64 > > signature
Definition acir.hpp:2437
std::shared_ptr< std::array< Acir::Witness, 3 > > outputs
Definition acir.hpp:2502
friend bool operator==(const EmbeddedCurveAdd &, const EmbeddedCurveAdd &)
Definition acir.hpp:4877
std::shared_ptr< std::array< Acir::FunctionInput, 3 > > input2
Definition acir.hpp:2500
void msgpack_unpack(msgpack::object const &o)
Definition acir.hpp:2506
std::shared_ptr< std::array< Acir::FunctionInput, 3 > > input1
Definition acir.hpp:2499
std::shared_ptr< std::array< Acir::FunctionInput, 25 > > inputs
Definition acir.hpp:2528
friend bool operator==(const Keccakf1600 &, const Keccakf1600 &)
Definition acir.hpp:4922
void msgpack_unpack(msgpack::object const &o)
Definition acir.hpp:2533
std::shared_ptr< std::array< Acir::Witness, 25 > > outputs
Definition acir.hpp:2529
std::vector< Acir::FunctionInput > scalars
Definition acir.hpp:2471
std::vector< Acir::FunctionInput > points
Definition acir.hpp:2470
std::shared_ptr< std::array< Acir::Witness, 3 > > outputs
Definition acir.hpp:2473
friend bool operator==(const MultiScalarMul &, const MultiScalarMul &)
Definition acir.hpp:4832
void msgpack_unpack(msgpack::object const &o)
Definition acir.hpp:2477
std::vector< Acir::Witness > outputs
Definition acir.hpp:2587
std::vector< Acir::FunctionInput > inputs
Definition acir.hpp:2586
void msgpack_unpack(msgpack::object const &o)
Definition acir.hpp:2591
friend bool operator==(const Poseidon2Permutation &, const Poseidon2Permutation &)
Definition acir.hpp:5013
void msgpack_unpack(msgpack::object const &o)
Definition acir.hpp:2336
friend bool operator==(const RANGE &, const RANGE &)
Definition acir.hpp:4617
Acir::FunctionInput input
Definition acir.hpp:2331
std::vector< Acir::FunctionInput > verification_key
Definition acir.hpp:2551
std::vector< Acir::FunctionInput > proof
Definition acir.hpp:2552
std::vector< Acir::FunctionInput > public_inputs
Definition acir.hpp:2553
friend bool operator==(const RecursiveAggregation &, const RecursiveAggregation &)
Definition acir.hpp:4957
void msgpack_unpack(msgpack::object const &o)
Definition acir.hpp:2560
void msgpack_unpack(msgpack::object const &o)
Definition acir.hpp:2615
std::shared_ptr< std::array< Acir::FunctionInput, 8 > > hash_values
Definition acir.hpp:2610
friend bool operator==(const Sha256Compression &, const Sha256Compression &)
Definition acir.hpp:5049
std::shared_ptr< std::array< Acir::FunctionInput, 16 > > inputs
Definition acir.hpp:2609
std::shared_ptr< std::array< Acir::Witness, 8 > > outputs
Definition acir.hpp:2611
void msgpack_unpack(msgpack::object const &o)
Definition acir.hpp:2309
Acir::FunctionInput rhs
Definition acir.hpp:2303
Acir::FunctionInput lhs
Definition acir.hpp:2302
friend bool operator==(const XOR &, const XOR &)
Definition acir.hpp:4573
friend bool operator==(const BlackBoxFuncCall &, const BlackBoxFuncCall &)
Definition acir.hpp:4452
void msgpack_unpack(msgpack::object const &o)
Definition acir.hpp:2652
std::variant< AES128Encrypt, AND, XOR, RANGE, Blake2s, Blake3, EcdsaSecp256k1, EcdsaSecp256r1, MultiScalarMul, EmbeddedCurveAdd, Keccakf1600, RecursiveAggregation, Poseidon2Permutation, Sha256Compression > value
Definition acir.hpp:2648
void msgpack_unpack(msgpack::object const &o)
Definition acir.hpp:618
friend bool operator==(const AES128Encrypt &, const AES128Encrypt &)
Definition acir.hpp:5121
Acir::HeapArray output
Definition acir.hpp:641
Acir::HeapArray message
Definition acir.hpp:640
friend bool operator==(const Blake2s &, const Blake2s &)
Definition acir.hpp:5166
void msgpack_unpack(msgpack::object const &o)
Definition acir.hpp:645
Acir::HeapArray message
Definition acir.hpp:663
Acir::HeapArray output
Definition acir.hpp:664
void msgpack_unpack(msgpack::object const &o)
Definition acir.hpp:668
friend bool operator==(const Blake3 &, const Blake3 &)
Definition acir.hpp:5200
Acir::MemoryAddress result
Definition acir.hpp:713
void msgpack_unpack(msgpack::object const &o)
Definition acir.hpp:717
Acir::HeapArray public_key_y
Definition acir.hpp:711
friend bool operator==(const EcdsaSecp256k1 &, const EcdsaSecp256k1 &)
Definition acir.hpp:5269
Acir::HeapArray public_key_x
Definition acir.hpp:710
Acir::MemoryAddress result
Definition acir.hpp:745
void msgpack_unpack(msgpack::object const &o)
Definition acir.hpp:749
friend bool operator==(const EcdsaSecp256r1 &, const EcdsaSecp256r1 &)
Definition acir.hpp:5319
Acir::HeapArray public_key_y
Definition acir.hpp:743
Acir::HeapArray public_key_x
Definition acir.hpp:742
Acir::MemoryAddress input1_x
Definition acir.hpp:799
friend bool operator==(const EmbeddedCurveAdd &, const EmbeddedCurveAdd &)
Definition acir.hpp:5409
Acir::MemoryAddress input2_infinite
Definition acir.hpp:804
Acir::MemoryAddress input1_y
Definition acir.hpp:800
Acir::MemoryAddress input1_infinite
Definition acir.hpp:801
Acir::MemoryAddress input2_x
Definition acir.hpp:802
void msgpack_unpack(msgpack::object const &o)
Definition acir.hpp:809
Acir::MemoryAddress input2_y
Definition acir.hpp:803
Acir::HeapArray input
Definition acir.hpp:686
friend bool operator==(const Keccakf1600 &, const Keccakf1600 &)
Definition acir.hpp:5234
Acir::HeapArray output
Definition acir.hpp:687
void msgpack_unpack(msgpack::object const &o)
Definition acir.hpp:691
friend bool operator==(const MultiScalarMul &, const MultiScalarMul &)
Definition acir.hpp:5369
void msgpack_unpack(msgpack::object const &o)
Definition acir.hpp:779
void msgpack_unpack(msgpack::object const &o)
Definition acir.hpp:842
friend bool operator==(const Poseidon2Permutation &, const Poseidon2Permutation &)
Definition acir.hpp:5469
friend bool operator==(const Sha256Compression &, const Sha256Compression &)
Definition acir.hpp:5504
void msgpack_unpack(msgpack::object const &o)
Definition acir.hpp:866
friend bool operator==(const ToRadix &, const ToRadix &)
Definition acir.hpp:5544
Acir::MemoryAddress output_pointer
Definition acir.hpp:888
Acir::MemoryAddress radix
Definition acir.hpp:887
Acir::MemoryAddress output_bits
Definition acir.hpp:890
Acir::MemoryAddress input
Definition acir.hpp:886
Acir::MemoryAddress num_limbs
Definition acir.hpp:889
void msgpack_unpack(msgpack::object const &o)
Definition acir.hpp:894
void msgpack_unpack(msgpack::object const &o)
Definition acir.hpp:932
friend bool operator==(const BlackBoxOp &, const BlackBoxOp &)
Definition acir.hpp:5089
std::variant< AES128Encrypt, Blake2s, Blake3, Keccakf1600, EcdsaSecp256k1, EcdsaSecp256r1, MultiScalarMul, EmbeddedCurveAdd, Poseidon2Permutation, Sha256Compression, ToRadix > value
Definition acir.hpp:928
friend bool operator==(const BlockId &, const BlockId &)
Definition acir.hpp:5593
void msgpack_unpack(msgpack::object const &o)
Definition acir.hpp:2867
uint32_t value
Definition acir.hpp:2863
friend bool operator==(const CallData &, const CallData &)
Definition acir.hpp:5679
void msgpack_unpack(msgpack::object const &o)
Definition acir.hpp:2891
void msgpack_unpack(msgpack::object const &o)
Definition acir.hpp:2883
friend bool operator==(const Memory &, const Memory &)
Definition acir.hpp:5657
void msgpack_unpack(msgpack::object const &o)
Definition acir.hpp:2905
friend bool operator==(const ReturnData &, const ReturnData &)
Definition acir.hpp:5708
void msgpack_unpack(msgpack::object const &o)
Definition acir.hpp:2912
std::variant< Memory, CallData, ReturnData > value
Definition acir.hpp:2908
friend bool operator==(const BlockType &, const BlockType &)
Definition acir.hpp:5625
friend bool operator==(const BrilligBytecode &, const BrilligBytecode &)
Definition acir.hpp:5731
std::vector< Acir::BrilligOpcode > bytecode
Definition acir.hpp:3745
std::string function_name
Definition acir.hpp:3744
void msgpack_unpack(msgpack::object const &o)
Definition acir.hpp:3749
void msgpack_unpack(msgpack::object const &o)
Definition acir.hpp:3008
std::vector< Acir::Expression > value
Definition acir.hpp:3004
friend bool operator==(const Array &, const Array &)
Definition acir.hpp:5829
void msgpack_unpack(msgpack::object const &o)
Definition acir.hpp:3024
friend bool operator==(const MemoryArray &, const MemoryArray &)
Definition acir.hpp:5858
Acir::Expression value
Definition acir.hpp:2988
friend bool operator==(const Single &, const Single &)
Definition acir.hpp:5800
void msgpack_unpack(msgpack::object const &o)
Definition acir.hpp:2992
void msgpack_unpack(msgpack::object const &o)
Definition acir.hpp:3039
std::variant< Single, Array, MemoryArray > value
Definition acir.hpp:3035
friend bool operator==(const BrilligInputs &, const BrilligInputs &)
Definition acir.hpp:5768
friend bool operator==(const BinaryFieldOp &, const BinaryFieldOp &)
Definition acir.hpp:5920
Acir::MemoryAddress destination
Definition acir.hpp:1400
void msgpack_unpack(msgpack::object const &o)
Definition acir.hpp:1407
void msgpack_unpack(msgpack::object const &o)
Definition acir.hpp:1437
Acir::MemoryAddress destination
Definition acir.hpp:1429
Acir::MemoryAddress rhs
Definition acir.hpp:1433
friend bool operator==(const BinaryIntOp &, const BinaryIntOp &)
Definition acir.hpp:5965
Acir::IntegerBitSize bit_size
Definition acir.hpp:1431
Acir::MemoryAddress lhs
Definition acir.hpp:1432
void msgpack_unpack(msgpack::object const &o)
Definition acir.hpp:1794
Acir::BlackBoxOp value
Definition acir.hpp:1790
friend bool operator==(const BlackBox &, const BlackBox &)
Definition acir.hpp:6525
friend bool operator==(const Call &, const Call &)
Definition acir.hpp:6196
void msgpack_unpack(msgpack::object const &o)
Definition acir.hpp:1586
Acir::MemoryAddress offset_address
Definition acir.hpp:1558
friend bool operator==(const CalldataCopy &, const CalldataCopy &)
Definition acir.hpp:6156
Acir::MemoryAddress destination_address
Definition acir.hpp:1556
Acir::MemoryAddress size_address
Definition acir.hpp:1557
void msgpack_unpack(msgpack::object const &o)
Definition acir.hpp:1562
Acir::MemoryAddress source
Definition acir.hpp:1488
void msgpack_unpack(msgpack::object const &o)
Definition acir.hpp:1493
Acir::MemoryAddress destination
Definition acir.hpp:1487
Acir::BitSize bit_size
Definition acir.hpp:1489
friend bool operator==(const Cast &, const Cast &)
Definition acir.hpp:6054
Acir::MemoryAddress source_b
Definition acir.hpp:1717
friend bool operator==(const ConditionalMov &, const ConditionalMov &)
Definition acir.hpp:6412
Acir::MemoryAddress source_a
Definition acir.hpp:1716
void msgpack_unpack(msgpack::object const &o)
Definition acir.hpp:1722
Acir::MemoryAddress destination
Definition acir.hpp:1715
Acir::MemoryAddress condition
Definition acir.hpp:1718
Acir::BitSize bit_size
Definition acir.hpp:1603
friend bool operator==(const Const &, const Const &)
Definition acir.hpp:6225
std::vector< uint8_t > value
Definition acir.hpp:1604
void msgpack_unpack(msgpack::object const &o)
Definition acir.hpp:1608
Acir::MemoryAddress destination
Definition acir.hpp:1602
std::vector< Acir::HeapValueType > input_value_types
Definition acir.hpp:1664
std::vector< Acir::HeapValueType > destination_value_types
Definition acir.hpp:1662
std::vector< Acir::ValueOrArray > destinations
Definition acir.hpp:1661
friend bool operator==(const ForeignCall &, const ForeignCall &)
Definition acir.hpp:6327
void msgpack_unpack(msgpack::object const &o)
Definition acir.hpp:1668
std::vector< Acir::ValueOrArray > inputs
Definition acir.hpp:1663
std::vector< uint8_t > value
Definition acir.hpp:1630
void msgpack_unpack(msgpack::object const &o)
Definition acir.hpp:1634
friend bool operator==(const IndirectConst &, const IndirectConst &)
Definition acir.hpp:6264
Acir::MemoryAddress destination_pointer
Definition acir.hpp:1628
void msgpack_unpack(msgpack::object const &o)
Definition acir.hpp:1540
friend bool operator==(const Jump &, const Jump &)
Definition acir.hpp:6127
Acir::MemoryAddress condition
Definition acir.hpp:1513
friend bool operator==(const JumpIf &, const JumpIf &)
Definition acir.hpp:6093
void msgpack_unpack(msgpack::object const &o)
Definition acir.hpp:1518
void msgpack_unpack(msgpack::object const &o)
Definition acir.hpp:1749
Acir::MemoryAddress destination
Definition acir.hpp:1744
Acir::MemoryAddress source_pointer
Definition acir.hpp:1745
friend bool operator==(const Load &, const Load &)
Definition acir.hpp:6457
Acir::MemoryAddress destination
Definition acir.hpp:1692
friend bool operator==(const Mov &, const Mov &)
Definition acir.hpp:6378
void msgpack_unpack(msgpack::object const &o)
Definition acir.hpp:1697
Acir::MemoryAddress source
Definition acir.hpp:1693
friend bool operator==(const Not &, const Not &)
Definition acir.hpp:6015
Acir::MemoryAddress source
Definition acir.hpp:1462
Acir::IntegerBitSize bit_size
Definition acir.hpp:1463
void msgpack_unpack(msgpack::object const &o)
Definition acir.hpp:1467
Acir::MemoryAddress destination
Definition acir.hpp:1461
friend bool operator==(const Return &, const Return &)
Definition acir.hpp:6304
void msgpack_unpack(msgpack::object const &o)
Definition acir.hpp:1656
friend bool operator==(const Stop &, const Stop &)
Definition acir.hpp:6584
void msgpack_unpack(msgpack::object const &o)
Definition acir.hpp:1830
Acir::HeapVector return_data
Definition acir.hpp:1826
friend bool operator==(const Store &, const Store &)
Definition acir.hpp:6491
void msgpack_unpack(msgpack::object const &o)
Definition acir.hpp:1772
Acir::MemoryAddress source
Definition acir.hpp:1768
Acir::MemoryAddress destination_pointer
Definition acir.hpp:1767
friend bool operator==(const Trap &, const Trap &)
Definition acir.hpp:6555
void msgpack_unpack(msgpack::object const &o)
Definition acir.hpp:1810
Acir::HeapVector revert_data
Definition acir.hpp:1806
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:1864
friend bool operator==(const BrilligOpcode &, const BrilligOpcode &)
Definition acir.hpp:5888
void msgpack_unpack(msgpack::object const &o)
Definition acir.hpp:1868
std::vector< Acir::Witness > value
Definition acir.hpp:3125
friend bool operator==(const Array &, const Array &)
Definition acir.hpp:6675
void msgpack_unpack(msgpack::object const &o)
Definition acir.hpp:3129
friend bool operator==(const Simple &, const Simple &)
Definition acir.hpp:6645
void msgpack_unpack(msgpack::object const &o)
Definition acir.hpp:3113
friend bool operator==(const BrilligOutputs &, const BrilligOutputs &)
Definition acir.hpp:6613
void msgpack_unpack(msgpack::object const &o)
Definition acir.hpp:3144
std::variant< Simple, Array > value
Definition acir.hpp:3140
Acir::PublicInputs return_values
Definition acir.hpp:3711
std::vector< Acir::Opcode > opcodes
Definition acir.hpp:3708
friend bool operator==(const Circuit &, const Circuit &)
Definition acir.hpp:6704
std::optional< uint32_t > current_witness_index
Definition acir.hpp:3707
void msgpack_unpack(msgpack::object const &o)
Definition acir.hpp:3716
std::vector< Acir::Witness > private_parameters
Definition acir.hpp:3709
Acir::PublicInputs public_parameters
Definition acir.hpp:3710
std::string function_name
Definition acir.hpp:3706
std::vector< std::tuple< Acir::OpcodeLocation, Acir::AssertionPayload > > assert_messages
Definition acir.hpp:3712
std::vector< std::tuple< std::vector< uint8_t >, Acir::Witness > > linear_combinations
Definition acir.hpp:2961
std::vector< uint8_t > q_c
Definition acir.hpp:2962
std::vector< std::tuple< std::vector< uint8_t >, Acir::Witness, Acir::Witness > > mul_terms
Definition acir.hpp:2960
void msgpack_unpack(msgpack::object const &o)
Definition acir.hpp:2966
friend bool operator==(const Expression &, const Expression &)
Definition acir.hpp:6766
void msgpack_unpack(msgpack::object const &o)
Definition acir.hpp:3482
friend bool operator==(const Expression &, const Expression &)
Definition acir.hpp:6841
friend bool operator==(const Memory &, const Memory &)
Definition acir.hpp:6871
void msgpack_unpack(msgpack::object const &o)
Definition acir.hpp:3498
std::variant< Expression, Memory > value
Definition acir.hpp:3509
friend bool operator==(const ExpressionOrMemory &, const ExpressionOrMemory &)
Definition acir.hpp:6808
void msgpack_unpack(msgpack::object const &o)
Definition acir.hpp:3513
std::vector< uint8_t > value
Definition acir.hpp:2152
void msgpack_unpack(msgpack::object const &o)
Definition acir.hpp:2156
friend bool operator==(const Constant &, const Constant &)
Definition acir.hpp:6933
friend bool operator==(const Witness &, const Witness &)
Definition acir.hpp:6963
void msgpack_unpack(msgpack::object const &o)
Definition acir.hpp:2172
void msgpack_unpack(msgpack::object const &o)
Definition acir.hpp:2187
std::variant< Constant, Witness > value
Definition acir.hpp:2183
friend bool operator==(const FunctionInput &, const FunctionInput &)
Definition acir.hpp:6901
Acir::SemiFlattenedLength size
Definition acir.hpp:587
void msgpack_unpack(msgpack::object const &o)
Definition acir.hpp:591
friend bool operator==(const HeapArray &, const HeapArray &)
Definition acir.hpp:6993
Acir::MemoryAddress pointer
Definition acir.hpp:586
Acir::SemanticLength size
Definition acir.hpp:1141
void msgpack_unpack(msgpack::object const &o)
Definition acir.hpp:1145
friend bool operator==(const Array &, const Array &)
Definition acir.hpp:7091
std::vector< Acir::HeapValueType > value_types
Definition acir.hpp:1140
friend bool operator==(const Simple &, const Simple &)
Definition acir.hpp:7062
void msgpack_unpack(msgpack::object const &o)
Definition acir.hpp:1128
friend bool operator==(const Vector &, const Vector &)
Definition acir.hpp:7125
void msgpack_unpack(msgpack::object const &o)
Definition acir.hpp:1167
std::vector< Acir::HeapValueType > value_types
Definition acir.hpp:1163
friend bool operator==(const HeapValueType &, const HeapValueType &)
Definition acir.hpp:7030
void msgpack_unpack(msgpack::object const &o)
Definition acir.hpp:1186
std::variant< Simple, Array, Vector > value
Definition acir.hpp:1182
void msgpack_unpack(msgpack::object const &o)
Definition acir.hpp:1259
friend bool operator==(const HeapVector &, const HeapVector &)
Definition acir.hpp:7154
Acir::MemoryAddress size
Definition acir.hpp:1255
Acir::MemoryAddress pointer
Definition acir.hpp:1254
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:7338
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:7269
void msgpack_unpack(msgpack::object const &o)
Definition acir.hpp:322
friend bool operator==(const U1 &, const U1 &)
Definition acir.hpp:7223
friend bool operator==(const U32 &, const U32 &)
Definition acir.hpp:7292
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:7315
void msgpack_unpack(msgpack::object const &o)
Definition acir.hpp:328
friend bool operator==(const U8 &, const U8 &)
Definition acir.hpp:7246
void msgpack_unpack(msgpack::object const &o)
Definition acir.hpp:359
friend bool operator==(const IntegerBitSize &, const IntegerBitSize &)
Definition acir.hpp:7191
std::variant< U1, U8, U16, U32, U64, U128 > value
Definition acir.hpp:355
Acir::Expression value
Definition acir.hpp:3201
friend bool operator==(const MemOp &, const MemOp &)
Definition acir.hpp:7361
void msgpack_unpack(msgpack::object const &o)
Definition acir.hpp:3205
Acir::Expression operation
Definition acir.hpp:3199
Acir::Expression index
Definition acir.hpp:3200
friend bool operator==(const Direct &, const Direct &)
Definition acir.hpp:7435
void msgpack_unpack(msgpack::object const &o)
Definition acir.hpp:484
void msgpack_unpack(msgpack::object const &o)
Definition acir.hpp:500
friend bool operator==(const Relative &, const Relative &)
Definition acir.hpp:7464
void msgpack_unpack(msgpack::object const &o)
Definition acir.hpp:515
friend bool operator==(const MemoryAddress &, const MemoryAddress &)
Definition acir.hpp:7403
std::variant< Direct, Relative > value
Definition acir.hpp:511
void msgpack_unpack(msgpack::object const &o)
Definition acir.hpp:3231
Acir::Expression value
Definition acir.hpp:3227
friend bool operator==(const AssertZero &, const AssertZero &)
Definition acir.hpp:7526
void msgpack_unpack(msgpack::object const &o)
Definition acir.hpp:3247
Acir::BlackBoxFuncCall value
Definition acir.hpp:3243
friend bool operator==(const BlackBoxFuncCall &, const BlackBoxFuncCall &)
Definition acir.hpp:7555
std::optional< Acir::Expression > predicate
Definition acir.hpp:3311
friend bool operator==(const BrilligCall &, const BrilligCall &)
Definition acir.hpp:7657
std::vector< Acir::BrilligInputs > inputs
Definition acir.hpp:3309
std::vector< Acir::BrilligOutputs > outputs
Definition acir.hpp:3310
void msgpack_unpack(msgpack::object const &o)
Definition acir.hpp:3315
void msgpack_unpack(msgpack::object const &o)
Definition acir.hpp:3344
friend bool operator==(const Call &, const Call &)
Definition acir.hpp:7701
std::vector< Acir::Witness > outputs
Definition acir.hpp:3339
std::optional< Acir::Expression > predicate
Definition acir.hpp:3340
std::vector< Acir::Witness > inputs
Definition acir.hpp:3338
Acir::BlockId block_id
Definition acir.hpp:3282
std::vector< Acir::Witness > init
Definition acir.hpp:3283
Acir::BlockType block_type
Definition acir.hpp:3284
void msgpack_unpack(msgpack::object const &o)
Definition acir.hpp:3288
friend bool operator==(const MemoryInit &, const MemoryInit &)
Definition acir.hpp:7618
friend bool operator==(const MemoryOp &, const MemoryOp &)
Definition acir.hpp:7585
void msgpack_unpack(msgpack::object const &o)
Definition acir.hpp:3264
Acir::BlockId block_id
Definition acir.hpp:3259
std::variant< AssertZero, BlackBoxFuncCall, MemoryOp, MemoryInit, BrilligCall, Call > value
Definition acir.hpp:3365
void msgpack_unpack(msgpack::object const &o)
Definition acir.hpp:3369
friend bool operator==(const Opcode &, const Opcode &)
Definition acir.hpp:7494
void msgpack_unpack(msgpack::object const &o)
Definition acir.hpp:3597
friend bool operator==(const Acir &, const Acir &)
Definition acir.hpp:7776
friend bool operator==(const Brillig &, const Brillig &)
Definition acir.hpp:7805
void msgpack_unpack(msgpack::object const &o)
Definition acir.hpp:3614
friend bool operator==(const OpcodeLocation &, const OpcodeLocation &)
Definition acir.hpp:7744
void msgpack_unpack(msgpack::object const &o)
Definition acir.hpp:3635
std::variant< Acir, Brillig > value
Definition acir.hpp:3631
std::vector< Acir::Circuit > functions
Definition acir.hpp:3767
friend bool operator==(const Program &, const Program &)
Definition acir.hpp:7840
std::vector< Acir::BrilligBytecode > unconstrained_functions
Definition acir.hpp:3768
void msgpack_unpack(msgpack::object const &o)
Definition acir.hpp:3772
std::vector< Acir::Circuit > functions
Definition acir.hpp:3790
void msgpack_unpack(msgpack::object const &o)
Definition acir.hpp:3795
std::monostate unconstrained_functions
Definition acir.hpp:3791
friend bool operator==(const ProgramWithoutBrillig &, const ProgramWithoutBrillig &)
Definition acir.hpp:7878
friend bool operator==(const PublicInputs &, const PublicInputs &)
Definition acir.hpp:7917
std::vector< Acir::Witness > value
Definition acir.hpp:3690
void msgpack_unpack(msgpack::object const &o)
Definition acir.hpp:3694
friend bool operator==(const SemanticLength &, const SemanticLength &)
Definition acir.hpp:7949
void msgpack_unpack(msgpack::object const &o)
Definition acir.hpp:1108
void msgpack_unpack(msgpack::object const &o)
Definition acir.hpp:574
friend bool operator==(const SemiFlattenedLength &, const SemiFlattenedLength &)
Definition acir.hpp:7981
friend bool operator==(const HeapArray &, const HeapArray &)
Definition acir.hpp:8076
void msgpack_unpack(msgpack::object const &o)
Definition acir.hpp:1299
void msgpack_unpack(msgpack::object const &o)
Definition acir.hpp:1315
friend bool operator==(const HeapVector &, const HeapVector &)
Definition acir.hpp:8106
void msgpack_unpack(msgpack::object const &o)
Definition acir.hpp:1283
friend bool operator==(const MemoryAddress &, const MemoryAddress &)
Definition acir.hpp:8046
Acir::MemoryAddress value
Definition acir.hpp:1279
void msgpack_unpack(msgpack::object const &o)
Definition acir.hpp:1330
std::variant< MemoryAddress, HeapArray, HeapVector > value
Definition acir.hpp:1326
friend bool operator==(const ValueOrArray &, const ValueOrArray &)
Definition acir.hpp:8014
uint32_t value
Definition acir.hpp:2134
void msgpack_unpack(msgpack::object const &o)
Definition acir.hpp:2138
friend bool operator==(const Witness &, const Witness &)
Definition acir.hpp:8136
static T deserialize(Deserializer &deserializer)
static void serialize(const T &value, Serializer &serializer)
void throw_or_abort(std::string const &err)