@aztec/bb.js 0.0.1-commit.d3ec352c → 0.0.1-commit.f295ac2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (186) hide show
  1. package/build/amd64-linux/bb +0 -0
  2. package/build/amd64-linux/nodejs_module.node +0 -0
  3. package/build/amd64-macos/bb +0 -0
  4. package/build/amd64-macos/nodejs_module.node +0 -0
  5. package/build/arm64-linux/bb +0 -0
  6. package/build/arm64-linux/nodejs_module.node +0 -0
  7. package/build/arm64-macos/bb +0 -0
  8. package/build/arm64-macos/nodejs_module.node +0 -0
  9. package/dest/browser/barretenberg/backend.d.ts +48 -17
  10. package/dest/browser/barretenberg/backend.d.ts.map +1 -1
  11. package/dest/browser/barretenberg/backend.js +95 -6
  12. package/dest/browser/barretenberg/index.d.ts +2 -2
  13. package/dest/browser/barretenberg/index.d.ts.map +1 -1
  14. package/dest/browser/barretenberg/index.js +2 -2
  15. package/dest/browser/barretenberg_wasm/barretenberg_wasm_main/index.js +1 -1
  16. package/dest/browser/barretenberg_wasm/fetch_code/browser/barretenberg-threads.js +1 -1
  17. package/dest/browser/barretenberg_wasm/fetch_code/browser/barretenberg.js +1 -1
  18. package/dest/browser/bb_backends/index.d.ts +3 -1
  19. package/dest/browser/bb_backends/index.d.ts.map +1 -1
  20. package/dest/browser/cbind/generate.d.ts +5 -2
  21. package/dest/browser/cbind/generate.d.ts.map +1 -1
  22. package/dest/browser/cbind/generate.js +47 -25
  23. package/dest/browser/cbind/generated/api_types.d.ts +787 -1660
  24. package/dest/browser/cbind/generated/api_types.d.ts.map +1 -1
  25. package/dest/browser/cbind/generated/api_types.js +1535 -1535
  26. package/dest/browser/cbind/generated/async.d.ts +1 -1
  27. package/dest/browser/cbind/generated/async.d.ts.map +1 -1
  28. package/dest/browser/cbind/generated/async.js +6 -2
  29. package/dest/browser/cbind/generated/sync.d.ts +1 -1
  30. package/dest/browser/cbind/generated/sync.d.ts.map +1 -1
  31. package/dest/browser/cbind/generated/sync.js +6 -2
  32. package/dest/browser/cbind/naming.d.ts +16 -0
  33. package/dest/browser/cbind/naming.d.ts.map +1 -0
  34. package/dest/browser/cbind/naming.js +24 -0
  35. package/dest/browser/cbind/rust_codegen.d.ts +25 -0
  36. package/dest/browser/cbind/rust_codegen.d.ts.map +1 -0
  37. package/dest/browser/cbind/rust_codegen.js +416 -0
  38. package/dest/browser/cbind/schema_visitor.d.ts +47 -0
  39. package/dest/browser/cbind/schema_visitor.d.ts.map +1 -0
  40. package/dest/browser/cbind/schema_visitor.js +158 -0
  41. package/dest/browser/cbind/typescript_codegen.d.ts +30 -0
  42. package/dest/browser/cbind/typescript_codegen.d.ts.map +1 -0
  43. package/dest/browser/cbind/typescript_codegen.js +365 -0
  44. package/dest/browser/index.d.ts +2 -2
  45. package/dest/browser/index.d.ts.map +1 -1
  46. package/dest/browser/index.js +2 -2
  47. package/dest/node/barretenberg/backend.d.ts +48 -17
  48. package/dest/node/barretenberg/backend.d.ts.map +1 -1
  49. package/dest/node/barretenberg/backend.js +95 -6
  50. package/dest/node/barretenberg/backend.test.d.ts +2 -0
  51. package/dest/node/barretenberg/backend.test.d.ts.map +1 -0
  52. package/dest/node/barretenberg/backend.test.js +103 -0
  53. package/dest/node/barretenberg/index.d.ts +2 -2
  54. package/dest/node/barretenberg/index.d.ts.map +1 -1
  55. package/dest/node/barretenberg/index.js +2 -2
  56. package/dest/node/barretenberg_wasm/barretenberg-threads.wasm.gz +0 -0
  57. package/dest/node/barretenberg_wasm/barretenberg_wasm_main/index.js +1 -1
  58. package/dest/node/bb_backends/index.d.ts +3 -1
  59. package/dest/node/bb_backends/index.d.ts.map +1 -1
  60. package/dest/node/bb_backends/node/index.d.ts +1 -1
  61. package/dest/node/bb_backends/node/index.d.ts.map +1 -1
  62. package/dest/node/bb_backends/node/index.js +5 -5
  63. package/dest/node/bb_backends/node/native_shm.d.ts +3 -2
  64. package/dest/node/bb_backends/node/native_shm.d.ts.map +1 -1
  65. package/dest/node/bb_backends/node/native_shm.js +38 -20
  66. package/dest/node/bb_backends/node/native_shm_async.d.ts +2 -2
  67. package/dest/node/bb_backends/node/native_shm_async.d.ts.map +1 -1
  68. package/dest/node/bb_backends/node/native_shm_async.js +15 -20
  69. package/dest/node/bb_backends/node/native_socket.d.ts +1 -1
  70. package/dest/node/bb_backends/node/native_socket.d.ts.map +1 -1
  71. package/dest/node/bb_backends/node/native_socket.js +4 -4
  72. package/dest/node/bb_backends/node/platform.d.ts +1 -1
  73. package/dest/node/bb_backends/node/platform.d.ts.map +1 -1
  74. package/dest/node/bb_backends/node/platform.js +7 -2
  75. package/dest/node/cbind/generate.d.ts +5 -2
  76. package/dest/node/cbind/generate.d.ts.map +1 -1
  77. package/dest/node/cbind/generate.js +47 -25
  78. package/dest/node/cbind/generated/api_types.d.ts +787 -1660
  79. package/dest/node/cbind/generated/api_types.d.ts.map +1 -1
  80. package/dest/node/cbind/generated/api_types.js +1535 -1535
  81. package/dest/node/cbind/generated/async.d.ts +1 -1
  82. package/dest/node/cbind/generated/async.d.ts.map +1 -1
  83. package/dest/node/cbind/generated/async.js +6 -2
  84. package/dest/node/cbind/generated/sync.d.ts +1 -1
  85. package/dest/node/cbind/generated/sync.d.ts.map +1 -1
  86. package/dest/node/cbind/generated/sync.js +6 -2
  87. package/dest/node/cbind/naming.d.ts +16 -0
  88. package/dest/node/cbind/naming.d.ts.map +1 -0
  89. package/dest/node/cbind/naming.js +24 -0
  90. package/dest/node/cbind/rust_codegen.d.ts +25 -0
  91. package/dest/node/cbind/rust_codegen.d.ts.map +1 -0
  92. package/dest/node/cbind/rust_codegen.js +416 -0
  93. package/dest/node/cbind/schema_visitor.d.ts +47 -0
  94. package/dest/node/cbind/schema_visitor.d.ts.map +1 -0
  95. package/dest/node/cbind/schema_visitor.js +158 -0
  96. package/dest/node/cbind/typescript_codegen.d.ts +30 -0
  97. package/dest/node/cbind/typescript_codegen.d.ts.map +1 -0
  98. package/dest/node/cbind/typescript_codegen.js +365 -0
  99. package/dest/node/index.d.ts +2 -2
  100. package/dest/node/index.d.ts.map +1 -1
  101. package/dest/node/index.js +2 -2
  102. package/dest/node-cjs/barretenberg/backend.d.ts +48 -17
  103. package/dest/node-cjs/barretenberg/backend.d.ts.map +1 -1
  104. package/dest/node-cjs/barretenberg/backend.js +97 -6
  105. package/dest/node-cjs/barretenberg/backend.test.d.ts +2 -0
  106. package/dest/node-cjs/barretenberg/backend.test.d.ts.map +1 -0
  107. package/dest/node-cjs/barretenberg/backend.test.js +105 -0
  108. package/dest/node-cjs/barretenberg/index.d.ts +2 -2
  109. package/dest/node-cjs/barretenberg/index.d.ts.map +1 -1
  110. package/dest/node-cjs/barretenberg/index.js +4 -2
  111. package/dest/node-cjs/barretenberg_wasm/barretenberg-threads.wasm.gz +0 -0
  112. package/dest/node-cjs/barretenberg_wasm/barretenberg_wasm_main/index.js +1 -1
  113. package/dest/node-cjs/bb_backends/index.d.ts +3 -1
  114. package/dest/node-cjs/bb_backends/index.d.ts.map +1 -1
  115. package/dest/node-cjs/bb_backends/node/index.d.ts +1 -1
  116. package/dest/node-cjs/bb_backends/node/index.d.ts.map +1 -1
  117. package/dest/node-cjs/bb_backends/node/index.js +5 -5
  118. package/dest/node-cjs/bb_backends/node/native_shm.d.ts +3 -2
  119. package/dest/node-cjs/bb_backends/node/native_shm.d.ts.map +1 -1
  120. package/dest/node-cjs/bb_backends/node/native_shm.js +37 -19
  121. package/dest/node-cjs/bb_backends/node/native_shm_async.d.ts +2 -2
  122. package/dest/node-cjs/bb_backends/node/native_shm_async.d.ts.map +1 -1
  123. package/dest/node-cjs/bb_backends/node/native_shm_async.js +15 -20
  124. package/dest/node-cjs/bb_backends/node/native_socket.d.ts +1 -1
  125. package/dest/node-cjs/bb_backends/node/native_socket.d.ts.map +1 -1
  126. package/dest/node-cjs/bb_backends/node/native_socket.js +4 -4
  127. package/dest/node-cjs/bb_backends/node/platform.d.ts +1 -1
  128. package/dest/node-cjs/bb_backends/node/platform.d.ts.map +1 -1
  129. package/dest/node-cjs/bb_backends/node/platform.js +7 -2
  130. package/dest/node-cjs/cbind/generate.d.ts +5 -2
  131. package/dest/node-cjs/cbind/generate.d.ts.map +1 -1
  132. package/dest/node-cjs/cbind/generate.js +47 -25
  133. package/dest/node-cjs/cbind/generated/api_types.d.ts +787 -1660
  134. package/dest/node-cjs/cbind/generated/api_types.d.ts.map +1 -1
  135. package/dest/node-cjs/cbind/generated/api_types.js +1744 -1744
  136. package/dest/node-cjs/cbind/generated/async.d.ts +1 -1
  137. package/dest/node-cjs/cbind/generated/async.d.ts.map +1 -1
  138. package/dest/node-cjs/cbind/generated/async.js +6 -2
  139. package/dest/node-cjs/cbind/generated/sync.d.ts +1 -1
  140. package/dest/node-cjs/cbind/generated/sync.d.ts.map +1 -1
  141. package/dest/node-cjs/cbind/generated/sync.js +6 -2
  142. package/dest/node-cjs/cbind/naming.d.ts +16 -0
  143. package/dest/node-cjs/cbind/naming.d.ts.map +1 -0
  144. package/dest/node-cjs/cbind/naming.js +28 -0
  145. package/dest/node-cjs/cbind/rust_codegen.d.ts +25 -0
  146. package/dest/node-cjs/cbind/rust_codegen.d.ts.map +1 -0
  147. package/dest/node-cjs/cbind/rust_codegen.js +420 -0
  148. package/dest/node-cjs/cbind/schema_visitor.d.ts +47 -0
  149. package/dest/node-cjs/cbind/schema_visitor.d.ts.map +1 -0
  150. package/dest/node-cjs/cbind/schema_visitor.js +162 -0
  151. package/dest/node-cjs/cbind/typescript_codegen.d.ts +30 -0
  152. package/dest/node-cjs/cbind/typescript_codegen.d.ts.map +1 -0
  153. package/dest/node-cjs/cbind/typescript_codegen.js +369 -0
  154. package/dest/node-cjs/index.d.ts +2 -2
  155. package/dest/node-cjs/index.d.ts.map +1 -1
  156. package/dest/node-cjs/index.js +4 -2
  157. package/package.json +1 -1
  158. package/src/barretenberg/backend.test.ts +122 -0
  159. package/src/barretenberg/backend.ts +133 -19
  160. package/src/barretenberg/index.ts +9 -1
  161. package/src/barretenberg_wasm/barretenberg_wasm_main/index.ts +1 -1
  162. package/src/bb_backends/index.ts +3 -0
  163. package/src/bb_backends/node/index.ts +9 -4
  164. package/src/bb_backends/node/native_shm.ts +36 -18
  165. package/src/bb_backends/node/native_shm_async.ts +13 -18
  166. package/src/bb_backends/node/native_socket.ts +3 -4
  167. package/src/bb_backends/node/platform.ts +6 -1
  168. package/src/cbind/generate.ts +51 -32
  169. package/src/cbind/generated/api_types.ts +1655 -2756
  170. package/src/cbind/generated/async.ts +7 -2
  171. package/src/cbind/generated/sync.ts +7 -2
  172. package/src/cbind/naming.ts +27 -0
  173. package/src/cbind/rust_codegen.ts +459 -0
  174. package/src/cbind/schema_visitor.ts +219 -0
  175. package/src/cbind/typescript_codegen.ts +419 -0
  176. package/src/index.ts +4 -0
  177. package/dest/browser/cbind/schema_compiler.d.ts +0 -68
  178. package/dest/browser/cbind/schema_compiler.d.ts.map +0 -1
  179. package/dest/browser/cbind/schema_compiler.js +0 -600
  180. package/dest/node/cbind/schema_compiler.d.ts +0 -68
  181. package/dest/node/cbind/schema_compiler.d.ts.map +0 -1
  182. package/dest/node/cbind/schema_compiler.js +0 -600
  183. package/dest/node-cjs/cbind/schema_compiler.d.ts +0 -68
  184. package/dest/node-cjs/cbind/schema_compiler.d.ts.map +0 -1
  185. package/dest/node-cjs/cbind/schema_compiler.js +0 -607
  186. package/src/cbind/schema_compiler.ts +0 -745
@@ -3,9 +3,14 @@
3
3
  import { IMsgpackBackendAsync } from '../../bb_backends/interface.js';
4
4
  import { Decoder, Encoder } from 'msgpackr';
5
5
  import { BBApiException } from '../../bbapi_exception.js';
6
- import { AesDecrypt, AesDecryptResponse, AesEncrypt, AesEncryptResponse, BbApiBase, Blake2s, Blake2sResponse, Blake2sToField, Blake2sToFieldResponse, Bn254FqSqrt, Bn254FqSqrtResponse, Bn254FrSqrt, Bn254FrSqrtResponse, Bn254G1FromCompressed, Bn254G1FromCompressedResponse, Bn254G1IsOnCurve, Bn254G1IsOnCurveResponse, Bn254G1Mul, Bn254G1MulResponse, Bn254G1Point, Bn254G2Mul, Bn254G2MulResponse, Bn254G2Point, ChonkAccumulate, ChonkAccumulateResponse, ChonkCheckPrecomputedVk, ChonkCheckPrecomputedVkResponse, ChonkComputeIvcVk, ChonkComputeIvcVkResponse, ChonkComputeStandaloneVk, ChonkComputeStandaloneVkResponse, ChonkLoad, ChonkLoadResponse, ChonkProof, ChonkProve, ChonkProveResponse, ChonkStart, ChonkStartResponse, ChonkStats, ChonkStatsResponse, ChonkVerify, ChonkVerifyResponse, CircuitComputeVk, CircuitComputeVkResponse, CircuitInfoResponse, CircuitInput, CircuitInputNoVK, CircuitProve, CircuitProveResponse, CircuitStats, CircuitVerify, CircuitVerifyResponse, CircuitWriteSolidityVerifier, CircuitWriteSolidityVerifierResponse, EcdsaSecp256k1ComputePublicKey, EcdsaSecp256k1ComputePublicKeyResponse, EcdsaSecp256k1ConstructSignature, EcdsaSecp256k1ConstructSignatureResponse, EcdsaSecp256k1RecoverPublicKey, EcdsaSecp256k1RecoverPublicKeyResponse, EcdsaSecp256k1VerifySignature, EcdsaSecp256k1VerifySignatureResponse, EcdsaSecp256r1ComputePublicKey, EcdsaSecp256r1ComputePublicKeyResponse, EcdsaSecp256r1ConstructSignature, EcdsaSecp256r1ConstructSignatureResponse, EcdsaSecp256r1RecoverPublicKey, EcdsaSecp256r1RecoverPublicKeyResponse, EcdsaSecp256r1VerifySignature, EcdsaSecp256r1VerifySignatureResponse, ErrorResponse, Field2, Fq, Fr, GoblinProof, GrumpkinAdd, GrumpkinAddResponse, GrumpkinBatchMul, GrumpkinBatchMulResponse, GrumpkinGetRandomFr, GrumpkinGetRandomFrResponse, GrumpkinMul, GrumpkinMulResponse, GrumpkinPoint, GrumpkinReduce512, GrumpkinReduce512Response, MegaVkAsFields, MegaVkAsFieldsResponse, PedersenCommit, PedersenCommitResponse, PedersenHash, PedersenHashBuffer, PedersenHashBufferResponse, PedersenHashResponse, Poseidon2Hash, Poseidon2HashAccumulate, Poseidon2HashAccumulateResponse, Poseidon2HashResponse, Poseidon2Permutation, Poseidon2PermutationResponse, ProofSystemSettings, SchnorrComputePublicKey, SchnorrComputePublicKeyResponse, SchnorrConstructSignature, SchnorrConstructSignatureResponse, SchnorrVerifySignature, SchnorrVerifySignatureResponse, Secp256k1Fq, Secp256k1Fr, Secp256k1GetRandomFr, Secp256k1GetRandomFrResponse, Secp256k1Mul, Secp256k1MulResponse, Secp256k1Point, Secp256k1Reduce512, Secp256k1Reduce512Response, Secp256r1Fq, Secp256r1Fr, Secp256r1Point, Shutdown, ShutdownResponse, SrsInitGrumpkinSrs, SrsInitGrumpkinSrsResponse, SrsInitSrs, SrsInitSrsResponse, Uint256T, VkAsFields, VkAsFieldsResponse, fromAesDecrypt, fromAesEncrypt, fromBlake2s, fromBlake2sToField, fromBn254FqSqrt, fromBn254FrSqrt, fromBn254G1FromCompressed, fromBn254G1IsOnCurve, fromBn254G1Mul, fromBn254G2Mul, fromChonkAccumulate, fromChonkCheckPrecomputedVk, fromChonkComputeIvcVk, fromChonkComputeStandaloneVk, fromChonkLoad, fromChonkProve, fromChonkStart, fromChonkStats, fromChonkVerify, fromCircuitComputeVk, fromCircuitProve, fromCircuitStats, fromCircuitVerify, fromCircuitWriteSolidityVerifier, fromEcdsaSecp256k1ComputePublicKey, fromEcdsaSecp256k1ConstructSignature, fromEcdsaSecp256k1RecoverPublicKey, fromEcdsaSecp256k1VerifySignature, fromEcdsaSecp256r1ComputePublicKey, fromEcdsaSecp256r1ConstructSignature, fromEcdsaSecp256r1RecoverPublicKey, fromEcdsaSecp256r1VerifySignature, fromGrumpkinAdd, fromGrumpkinBatchMul, fromGrumpkinGetRandomFr, fromGrumpkinMul, fromGrumpkinReduce512, fromMegaVkAsFields, fromPedersenCommit, fromPedersenHash, fromPedersenHashBuffer, fromPoseidon2Hash, fromPoseidon2HashAccumulate, fromPoseidon2Permutation, fromSchnorrComputePublicKey, fromSchnorrConstructSignature, fromSchnorrVerifySignature, fromSecp256k1GetRandomFr, fromSecp256k1Mul, fromSecp256k1Reduce512, fromShutdown, fromSrsInitGrumpkinSrs, fromSrsInitSrs, fromVkAsFields, toAesDecryptResponse, toAesEncryptResponse, toBlake2sResponse, toBlake2sToFieldResponse, toBn254FqSqrtResponse, toBn254FrSqrtResponse, toBn254G1FromCompressedResponse, toBn254G1IsOnCurveResponse, toBn254G1MulResponse, toBn254G2MulResponse, toChonkAccumulateResponse, toChonkCheckPrecomputedVkResponse, toChonkComputeIvcVkResponse, toChonkComputeStandaloneVkResponse, toChonkLoadResponse, toChonkProveResponse, toChonkStartResponse, toChonkStatsResponse, toChonkVerifyResponse, toCircuitComputeVkResponse, toCircuitInfoResponse, toCircuitProveResponse, toCircuitVerifyResponse, toCircuitWriteSolidityVerifierResponse, toEcdsaSecp256k1ComputePublicKeyResponse, toEcdsaSecp256k1ConstructSignatureResponse, toEcdsaSecp256k1RecoverPublicKeyResponse, toEcdsaSecp256k1VerifySignatureResponse, toEcdsaSecp256r1ComputePublicKeyResponse, toEcdsaSecp256r1ConstructSignatureResponse, toEcdsaSecp256r1RecoverPublicKeyResponse, toEcdsaSecp256r1VerifySignatureResponse, toGrumpkinAddResponse, toGrumpkinBatchMulResponse, toGrumpkinGetRandomFrResponse, toGrumpkinMulResponse, toGrumpkinReduce512Response, toMegaVkAsFieldsResponse, toPedersenCommitResponse, toPedersenHashBufferResponse, toPedersenHashResponse, toPoseidon2HashAccumulateResponse, toPoseidon2HashResponse, toPoseidon2PermutationResponse, toSchnorrComputePublicKeyResponse, toSchnorrConstructSignatureResponse, toSchnorrVerifySignatureResponse, toSecp256k1GetRandomFrResponse, toSecp256k1MulResponse, toSecp256k1Reduce512Response, toShutdownResponse, toSrsInitGrumpkinSrsResponse, toSrsInitSrsResponse, toVkAsFieldsResponse } from './api_types.js';
6
+ import { AesDecrypt, AesDecryptResponse, AesEncrypt, AesEncryptResponse, BbApiBase, Blake2s, Blake2sResponse, Blake2sToField, Blake2sToFieldResponse, Bn254FqSqrt, Bn254FqSqrtResponse, Bn254FrSqrt, Bn254FrSqrtResponse, Bn254G1FromCompressed, Bn254G1FromCompressedResponse, Bn254G1IsOnCurve, Bn254G1IsOnCurveResponse, Bn254G1Mul, Bn254G1MulResponse, Bn254G2Mul, Bn254G2MulResponse, ChonkAccumulate, ChonkAccumulateResponse, ChonkCheckPrecomputedVk, ChonkCheckPrecomputedVkResponse, ChonkComputeIvcVk, ChonkComputeIvcVkResponse, ChonkComputeStandaloneVk, ChonkComputeStandaloneVkResponse, ChonkLoad, ChonkLoadResponse, ChonkProve, ChonkProveResponse, ChonkStart, ChonkStartResponse, ChonkStats, ChonkStatsResponse, ChonkVerify, ChonkVerifyResponse, CircuitComputeVk, CircuitComputeVkResponse, CircuitInfoResponse, CircuitProve, CircuitProveResponse, CircuitStats, CircuitVerify, CircuitVerifyResponse, CircuitWriteSolidityVerifier, CircuitWriteSolidityVerifierResponse, EcdsaSecp256k1ComputePublicKey, EcdsaSecp256k1ComputePublicKeyResponse, EcdsaSecp256k1ConstructSignature, EcdsaSecp256k1ConstructSignatureResponse, EcdsaSecp256k1RecoverPublicKey, EcdsaSecp256k1RecoverPublicKeyResponse, EcdsaSecp256k1VerifySignature, EcdsaSecp256k1VerifySignatureResponse, EcdsaSecp256r1ComputePublicKey, EcdsaSecp256r1ComputePublicKeyResponse, EcdsaSecp256r1ConstructSignature, EcdsaSecp256r1ConstructSignatureResponse, EcdsaSecp256r1RecoverPublicKey, EcdsaSecp256r1RecoverPublicKeyResponse, EcdsaSecp256r1VerifySignature, EcdsaSecp256r1VerifySignatureResponse, GrumpkinAdd, GrumpkinAddResponse, GrumpkinBatchMul, GrumpkinBatchMulResponse, GrumpkinGetRandomFr, GrumpkinGetRandomFrResponse, GrumpkinMul, GrumpkinMulResponse, GrumpkinReduce512, GrumpkinReduce512Response, MegaVkAsFields, MegaVkAsFieldsResponse, PedersenCommit, PedersenCommitResponse, PedersenHash, PedersenHashBuffer, PedersenHashBufferResponse, PedersenHashResponse, Poseidon2Hash, Poseidon2HashAccumulate, Poseidon2HashAccumulateResponse, Poseidon2HashResponse, Poseidon2Permutation, Poseidon2PermutationResponse, SchnorrComputePublicKey, SchnorrComputePublicKeyResponse, SchnorrConstructSignature, SchnorrConstructSignatureResponse, SchnorrVerifySignature, SchnorrVerifySignatureResponse, Secp256k1GetRandomFr, Secp256k1GetRandomFrResponse, Secp256k1Mul, Secp256k1MulResponse, Secp256k1Reduce512, Secp256k1Reduce512Response, Shutdown, ShutdownResponse, SrsInitGrumpkinSrs, SrsInitGrumpkinSrsResponse, SrsInitSrs, SrsInitSrsResponse, VkAsFields, VkAsFieldsResponse, fromAesDecrypt, fromAesEncrypt, fromBlake2s, fromBlake2sToField, fromBn254FqSqrt, fromBn254FrSqrt, fromBn254G1FromCompressed, fromBn254G1IsOnCurve, fromBn254G1Mul, fromBn254G2Mul, fromChonkAccumulate, fromChonkCheckPrecomputedVk, fromChonkComputeIvcVk, fromChonkComputeStandaloneVk, fromChonkLoad, fromChonkProve, fromChonkStart, fromChonkStats, fromChonkVerify, fromCircuitComputeVk, fromCircuitProve, fromCircuitStats, fromCircuitVerify, fromCircuitWriteSolidityVerifier, fromEcdsaSecp256k1ComputePublicKey, fromEcdsaSecp256k1ConstructSignature, fromEcdsaSecp256k1RecoverPublicKey, fromEcdsaSecp256k1VerifySignature, fromEcdsaSecp256r1ComputePublicKey, fromEcdsaSecp256r1ConstructSignature, fromEcdsaSecp256r1RecoverPublicKey, fromEcdsaSecp256r1VerifySignature, fromGrumpkinAdd, fromGrumpkinBatchMul, fromGrumpkinGetRandomFr, fromGrumpkinMul, fromGrumpkinReduce512, fromMegaVkAsFields, fromPedersenCommit, fromPedersenHash, fromPedersenHashBuffer, fromPoseidon2Hash, fromPoseidon2HashAccumulate, fromPoseidon2Permutation, fromSchnorrComputePublicKey, fromSchnorrConstructSignature, fromSchnorrVerifySignature, fromSecp256k1GetRandomFr, fromSecp256k1Mul, fromSecp256k1Reduce512, fromShutdown, fromSrsInitGrumpkinSrs, fromSrsInitSrs, fromVkAsFields, toAesDecryptResponse, toAesEncryptResponse, toBlake2sResponse, toBlake2sToFieldResponse, toBn254FqSqrtResponse, toBn254FrSqrtResponse, toBn254G1FromCompressedResponse, toBn254G1IsOnCurveResponse, toBn254G1MulResponse, toBn254G2MulResponse, toChonkAccumulateResponse, toChonkCheckPrecomputedVkResponse, toChonkComputeIvcVkResponse, toChonkComputeStandaloneVkResponse, toChonkLoadResponse, toChonkProveResponse, toChonkStartResponse, toChonkStatsResponse, toChonkVerifyResponse, toCircuitComputeVkResponse, toCircuitInfoResponse, toCircuitProveResponse, toCircuitVerifyResponse, toCircuitWriteSolidityVerifierResponse, toEcdsaSecp256k1ComputePublicKeyResponse, toEcdsaSecp256k1ConstructSignatureResponse, toEcdsaSecp256k1RecoverPublicKeyResponse, toEcdsaSecp256k1VerifySignatureResponse, toEcdsaSecp256r1ComputePublicKeyResponse, toEcdsaSecp256r1ConstructSignatureResponse, toEcdsaSecp256r1RecoverPublicKeyResponse, toEcdsaSecp256r1VerifySignatureResponse, toGrumpkinAddResponse, toGrumpkinBatchMulResponse, toGrumpkinGetRandomFrResponse, toGrumpkinMulResponse, toGrumpkinReduce512Response, toMegaVkAsFieldsResponse, toPedersenCommitResponse, toPedersenHashBufferResponse, toPedersenHashResponse, toPoseidon2HashAccumulateResponse, toPoseidon2HashResponse, toPoseidon2PermutationResponse, toSchnorrComputePublicKeyResponse, toSchnorrConstructSignatureResponse, toSchnorrVerifySignatureResponse, toSecp256k1GetRandomFrResponse, toSecp256k1MulResponse, toSecp256k1Reduce512Response, toShutdownResponse, toSrsInitGrumpkinSrsResponse, toSrsInitSrsResponse, toVkAsFieldsResponse } from './api_types.js';
7
+
8
+ async function msgpackCall(backend: IMsgpackBackendAsync, input: any[]) {
9
+ const inputBuffer = new Encoder({ useRecords: false }).pack(input);
10
+ const encodedResult = await backend.call(inputBuffer);
11
+ return new Decoder({ useRecords: false }).unpack(encodedResult);
12
+ }
7
13
 
8
- async function msgpackCall(backend: IMsgpackBackendAsync, input: any[]) { const inputBuffer = new Encoder({ useRecords: false }).pack(input); const encodedResult = await backend.call(inputBuffer); return new Decoder({ useRecords: false }).unpack(encodedResult);}
9
14
  export class AsyncApi implements BbApiBase {
10
15
  constructor(protected backend: IMsgpackBackendAsync) {}
11
16
 
@@ -3,9 +3,14 @@
3
3
  import { IMsgpackBackendSync } from '../../bb_backends/interface.js';
4
4
  import { Decoder, Encoder } from 'msgpackr';
5
5
  import { BBApiException } from '../../bbapi_exception.js';
6
- import { AesDecrypt, AesDecryptResponse, AesEncrypt, AesEncryptResponse, BbApiBase, Blake2s, Blake2sResponse, Blake2sToField, Blake2sToFieldResponse, Bn254FqSqrt, Bn254FqSqrtResponse, Bn254FrSqrt, Bn254FrSqrtResponse, Bn254G1FromCompressed, Bn254G1FromCompressedResponse, Bn254G1IsOnCurve, Bn254G1IsOnCurveResponse, Bn254G1Mul, Bn254G1MulResponse, Bn254G1Point, Bn254G2Mul, Bn254G2MulResponse, Bn254G2Point, ChonkAccumulate, ChonkAccumulateResponse, ChonkCheckPrecomputedVk, ChonkCheckPrecomputedVkResponse, ChonkComputeIvcVk, ChonkComputeIvcVkResponse, ChonkComputeStandaloneVk, ChonkComputeStandaloneVkResponse, ChonkLoad, ChonkLoadResponse, ChonkProof, ChonkProve, ChonkProveResponse, ChonkStart, ChonkStartResponse, ChonkStats, ChonkStatsResponse, ChonkVerify, ChonkVerifyResponse, CircuitComputeVk, CircuitComputeVkResponse, CircuitInfoResponse, CircuitInput, CircuitInputNoVK, CircuitProve, CircuitProveResponse, CircuitStats, CircuitVerify, CircuitVerifyResponse, CircuitWriteSolidityVerifier, CircuitWriteSolidityVerifierResponse, EcdsaSecp256k1ComputePublicKey, EcdsaSecp256k1ComputePublicKeyResponse, EcdsaSecp256k1ConstructSignature, EcdsaSecp256k1ConstructSignatureResponse, EcdsaSecp256k1RecoverPublicKey, EcdsaSecp256k1RecoverPublicKeyResponse, EcdsaSecp256k1VerifySignature, EcdsaSecp256k1VerifySignatureResponse, EcdsaSecp256r1ComputePublicKey, EcdsaSecp256r1ComputePublicKeyResponse, EcdsaSecp256r1ConstructSignature, EcdsaSecp256r1ConstructSignatureResponse, EcdsaSecp256r1RecoverPublicKey, EcdsaSecp256r1RecoverPublicKeyResponse, EcdsaSecp256r1VerifySignature, EcdsaSecp256r1VerifySignatureResponse, ErrorResponse, Field2, Fq, Fr, GoblinProof, GrumpkinAdd, GrumpkinAddResponse, GrumpkinBatchMul, GrumpkinBatchMulResponse, GrumpkinGetRandomFr, GrumpkinGetRandomFrResponse, GrumpkinMul, GrumpkinMulResponse, GrumpkinPoint, GrumpkinReduce512, GrumpkinReduce512Response, MegaVkAsFields, MegaVkAsFieldsResponse, PedersenCommit, PedersenCommitResponse, PedersenHash, PedersenHashBuffer, PedersenHashBufferResponse, PedersenHashResponse, Poseidon2Hash, Poseidon2HashAccumulate, Poseidon2HashAccumulateResponse, Poseidon2HashResponse, Poseidon2Permutation, Poseidon2PermutationResponse, ProofSystemSettings, SchnorrComputePublicKey, SchnorrComputePublicKeyResponse, SchnorrConstructSignature, SchnorrConstructSignatureResponse, SchnorrVerifySignature, SchnorrVerifySignatureResponse, Secp256k1Fq, Secp256k1Fr, Secp256k1GetRandomFr, Secp256k1GetRandomFrResponse, Secp256k1Mul, Secp256k1MulResponse, Secp256k1Point, Secp256k1Reduce512, Secp256k1Reduce512Response, Secp256r1Fq, Secp256r1Fr, Secp256r1Point, Shutdown, ShutdownResponse, SrsInitGrumpkinSrs, SrsInitGrumpkinSrsResponse, SrsInitSrs, SrsInitSrsResponse, Uint256T, VkAsFields, VkAsFieldsResponse, fromAesDecrypt, fromAesEncrypt, fromBlake2s, fromBlake2sToField, fromBn254FqSqrt, fromBn254FrSqrt, fromBn254G1FromCompressed, fromBn254G1IsOnCurve, fromBn254G1Mul, fromBn254G2Mul, fromChonkAccumulate, fromChonkCheckPrecomputedVk, fromChonkComputeIvcVk, fromChonkComputeStandaloneVk, fromChonkLoad, fromChonkProve, fromChonkStart, fromChonkStats, fromChonkVerify, fromCircuitComputeVk, fromCircuitProve, fromCircuitStats, fromCircuitVerify, fromCircuitWriteSolidityVerifier, fromEcdsaSecp256k1ComputePublicKey, fromEcdsaSecp256k1ConstructSignature, fromEcdsaSecp256k1RecoverPublicKey, fromEcdsaSecp256k1VerifySignature, fromEcdsaSecp256r1ComputePublicKey, fromEcdsaSecp256r1ConstructSignature, fromEcdsaSecp256r1RecoverPublicKey, fromEcdsaSecp256r1VerifySignature, fromGrumpkinAdd, fromGrumpkinBatchMul, fromGrumpkinGetRandomFr, fromGrumpkinMul, fromGrumpkinReduce512, fromMegaVkAsFields, fromPedersenCommit, fromPedersenHash, fromPedersenHashBuffer, fromPoseidon2Hash, fromPoseidon2HashAccumulate, fromPoseidon2Permutation, fromSchnorrComputePublicKey, fromSchnorrConstructSignature, fromSchnorrVerifySignature, fromSecp256k1GetRandomFr, fromSecp256k1Mul, fromSecp256k1Reduce512, fromShutdown, fromSrsInitGrumpkinSrs, fromSrsInitSrs, fromVkAsFields, toAesDecryptResponse, toAesEncryptResponse, toBlake2sResponse, toBlake2sToFieldResponse, toBn254FqSqrtResponse, toBn254FrSqrtResponse, toBn254G1FromCompressedResponse, toBn254G1IsOnCurveResponse, toBn254G1MulResponse, toBn254G2MulResponse, toChonkAccumulateResponse, toChonkCheckPrecomputedVkResponse, toChonkComputeIvcVkResponse, toChonkComputeStandaloneVkResponse, toChonkLoadResponse, toChonkProveResponse, toChonkStartResponse, toChonkStatsResponse, toChonkVerifyResponse, toCircuitComputeVkResponse, toCircuitInfoResponse, toCircuitProveResponse, toCircuitVerifyResponse, toCircuitWriteSolidityVerifierResponse, toEcdsaSecp256k1ComputePublicKeyResponse, toEcdsaSecp256k1ConstructSignatureResponse, toEcdsaSecp256k1RecoverPublicKeyResponse, toEcdsaSecp256k1VerifySignatureResponse, toEcdsaSecp256r1ComputePublicKeyResponse, toEcdsaSecp256r1ConstructSignatureResponse, toEcdsaSecp256r1RecoverPublicKeyResponse, toEcdsaSecp256r1VerifySignatureResponse, toGrumpkinAddResponse, toGrumpkinBatchMulResponse, toGrumpkinGetRandomFrResponse, toGrumpkinMulResponse, toGrumpkinReduce512Response, toMegaVkAsFieldsResponse, toPedersenCommitResponse, toPedersenHashBufferResponse, toPedersenHashResponse, toPoseidon2HashAccumulateResponse, toPoseidon2HashResponse, toPoseidon2PermutationResponse, toSchnorrComputePublicKeyResponse, toSchnorrConstructSignatureResponse, toSchnorrVerifySignatureResponse, toSecp256k1GetRandomFrResponse, toSecp256k1MulResponse, toSecp256k1Reduce512Response, toShutdownResponse, toSrsInitGrumpkinSrsResponse, toSrsInitSrsResponse, toVkAsFieldsResponse } from './api_types.js';
6
+ import { AesDecrypt, AesDecryptResponse, AesEncrypt, AesEncryptResponse, BbApiBase, Blake2s, Blake2sResponse, Blake2sToField, Blake2sToFieldResponse, Bn254FqSqrt, Bn254FqSqrtResponse, Bn254FrSqrt, Bn254FrSqrtResponse, Bn254G1FromCompressed, Bn254G1FromCompressedResponse, Bn254G1IsOnCurve, Bn254G1IsOnCurveResponse, Bn254G1Mul, Bn254G1MulResponse, Bn254G2Mul, Bn254G2MulResponse, ChonkAccumulate, ChonkAccumulateResponse, ChonkCheckPrecomputedVk, ChonkCheckPrecomputedVkResponse, ChonkComputeIvcVk, ChonkComputeIvcVkResponse, ChonkComputeStandaloneVk, ChonkComputeStandaloneVkResponse, ChonkLoad, ChonkLoadResponse, ChonkProve, ChonkProveResponse, ChonkStart, ChonkStartResponse, ChonkStats, ChonkStatsResponse, ChonkVerify, ChonkVerifyResponse, CircuitComputeVk, CircuitComputeVkResponse, CircuitInfoResponse, CircuitProve, CircuitProveResponse, CircuitStats, CircuitVerify, CircuitVerifyResponse, CircuitWriteSolidityVerifier, CircuitWriteSolidityVerifierResponse, EcdsaSecp256k1ComputePublicKey, EcdsaSecp256k1ComputePublicKeyResponse, EcdsaSecp256k1ConstructSignature, EcdsaSecp256k1ConstructSignatureResponse, EcdsaSecp256k1RecoverPublicKey, EcdsaSecp256k1RecoverPublicKeyResponse, EcdsaSecp256k1VerifySignature, EcdsaSecp256k1VerifySignatureResponse, EcdsaSecp256r1ComputePublicKey, EcdsaSecp256r1ComputePublicKeyResponse, EcdsaSecp256r1ConstructSignature, EcdsaSecp256r1ConstructSignatureResponse, EcdsaSecp256r1RecoverPublicKey, EcdsaSecp256r1RecoverPublicKeyResponse, EcdsaSecp256r1VerifySignature, EcdsaSecp256r1VerifySignatureResponse, GrumpkinAdd, GrumpkinAddResponse, GrumpkinBatchMul, GrumpkinBatchMulResponse, GrumpkinGetRandomFr, GrumpkinGetRandomFrResponse, GrumpkinMul, GrumpkinMulResponse, GrumpkinReduce512, GrumpkinReduce512Response, MegaVkAsFields, MegaVkAsFieldsResponse, PedersenCommit, PedersenCommitResponse, PedersenHash, PedersenHashBuffer, PedersenHashBufferResponse, PedersenHashResponse, Poseidon2Hash, Poseidon2HashAccumulate, Poseidon2HashAccumulateResponse, Poseidon2HashResponse, Poseidon2Permutation, Poseidon2PermutationResponse, SchnorrComputePublicKey, SchnorrComputePublicKeyResponse, SchnorrConstructSignature, SchnorrConstructSignatureResponse, SchnorrVerifySignature, SchnorrVerifySignatureResponse, Secp256k1GetRandomFr, Secp256k1GetRandomFrResponse, Secp256k1Mul, Secp256k1MulResponse, Secp256k1Reduce512, Secp256k1Reduce512Response, Shutdown, ShutdownResponse, SrsInitGrumpkinSrs, SrsInitGrumpkinSrsResponse, SrsInitSrs, SrsInitSrsResponse, VkAsFields, VkAsFieldsResponse, fromAesDecrypt, fromAesEncrypt, fromBlake2s, fromBlake2sToField, fromBn254FqSqrt, fromBn254FrSqrt, fromBn254G1FromCompressed, fromBn254G1IsOnCurve, fromBn254G1Mul, fromBn254G2Mul, fromChonkAccumulate, fromChonkCheckPrecomputedVk, fromChonkComputeIvcVk, fromChonkComputeStandaloneVk, fromChonkLoad, fromChonkProve, fromChonkStart, fromChonkStats, fromChonkVerify, fromCircuitComputeVk, fromCircuitProve, fromCircuitStats, fromCircuitVerify, fromCircuitWriteSolidityVerifier, fromEcdsaSecp256k1ComputePublicKey, fromEcdsaSecp256k1ConstructSignature, fromEcdsaSecp256k1RecoverPublicKey, fromEcdsaSecp256k1VerifySignature, fromEcdsaSecp256r1ComputePublicKey, fromEcdsaSecp256r1ConstructSignature, fromEcdsaSecp256r1RecoverPublicKey, fromEcdsaSecp256r1VerifySignature, fromGrumpkinAdd, fromGrumpkinBatchMul, fromGrumpkinGetRandomFr, fromGrumpkinMul, fromGrumpkinReduce512, fromMegaVkAsFields, fromPedersenCommit, fromPedersenHash, fromPedersenHashBuffer, fromPoseidon2Hash, fromPoseidon2HashAccumulate, fromPoseidon2Permutation, fromSchnorrComputePublicKey, fromSchnorrConstructSignature, fromSchnorrVerifySignature, fromSecp256k1GetRandomFr, fromSecp256k1Mul, fromSecp256k1Reduce512, fromShutdown, fromSrsInitGrumpkinSrs, fromSrsInitSrs, fromVkAsFields, toAesDecryptResponse, toAesEncryptResponse, toBlake2sResponse, toBlake2sToFieldResponse, toBn254FqSqrtResponse, toBn254FrSqrtResponse, toBn254G1FromCompressedResponse, toBn254G1IsOnCurveResponse, toBn254G1MulResponse, toBn254G2MulResponse, toChonkAccumulateResponse, toChonkCheckPrecomputedVkResponse, toChonkComputeIvcVkResponse, toChonkComputeStandaloneVkResponse, toChonkLoadResponse, toChonkProveResponse, toChonkStartResponse, toChonkStatsResponse, toChonkVerifyResponse, toCircuitComputeVkResponse, toCircuitInfoResponse, toCircuitProveResponse, toCircuitVerifyResponse, toCircuitWriteSolidityVerifierResponse, toEcdsaSecp256k1ComputePublicKeyResponse, toEcdsaSecp256k1ConstructSignatureResponse, toEcdsaSecp256k1RecoverPublicKeyResponse, toEcdsaSecp256k1VerifySignatureResponse, toEcdsaSecp256r1ComputePublicKeyResponse, toEcdsaSecp256r1ConstructSignatureResponse, toEcdsaSecp256r1RecoverPublicKeyResponse, toEcdsaSecp256r1VerifySignatureResponse, toGrumpkinAddResponse, toGrumpkinBatchMulResponse, toGrumpkinGetRandomFrResponse, toGrumpkinMulResponse, toGrumpkinReduce512Response, toMegaVkAsFieldsResponse, toPedersenCommitResponse, toPedersenHashBufferResponse, toPedersenHashResponse, toPoseidon2HashAccumulateResponse, toPoseidon2HashResponse, toPoseidon2PermutationResponse, toSchnorrComputePublicKeyResponse, toSchnorrConstructSignatureResponse, toSchnorrVerifySignatureResponse, toSecp256k1GetRandomFrResponse, toSecp256k1MulResponse, toSecp256k1Reduce512Response, toShutdownResponse, toSrsInitGrumpkinSrsResponse, toSrsInitSrsResponse, toVkAsFieldsResponse } from './api_types.js';
7
+
8
+ function msgpackCall(backend: IMsgpackBackendSync, input: any[]) {
9
+ const inputBuffer = new Encoder({ useRecords: false }).pack(input);
10
+ const encodedResult = backend.call(inputBuffer);
11
+ return new Decoder({ useRecords: false }).unpack(encodedResult);
12
+ }
7
13
 
8
- function msgpackCall(backend: IMsgpackBackendSync, input: any[]) { const inputBuffer = new Encoder({ useRecords: false }).pack(input); const encodedResult = backend.call(inputBuffer); return new Decoder({ useRecords: false }).unpack(encodedResult);}
9
14
  export class SyncApi {
10
15
  constructor(protected backend: IMsgpackBackendSync) {}
11
16
 
@@ -0,0 +1,27 @@
1
+ /**
2
+ * Shared naming utilities for code generators
3
+ */
4
+
5
+ /**
6
+ * Convert camelCase or PascalCase to snake_case
7
+ * @example toSnakeCase("Blake2s") -> "blake2s"
8
+ * @example toSnakeCase("poseidonHash") -> "poseidon_hash"
9
+ */
10
+ export function toSnakeCase(name: string): string {
11
+ return name.replace(/([A-Z])/g, '_$1').toLowerCase().replace(/^_/, '');
12
+ }
13
+
14
+ /**
15
+ * Convert snake_case to PascalCase
16
+ * @example toPascalCase("blake2s") -> "Blake2s"
17
+ * @example toPascalCase("poseidon_hash") -> "PoseidonHash"
18
+ */
19
+ export function toPascalCase(name: string): string {
20
+ // Already PascalCase (no underscores and starts with uppercase)
21
+ if (!name.includes('_') && name[0] === name[0].toUpperCase()) {
22
+ return name;
23
+ }
24
+ return name.split('_').map(part =>
25
+ part.charAt(0).toUpperCase() + part.slice(1).toLowerCase()
26
+ ).join('');
27
+ }
@@ -0,0 +1,459 @@
1
+ /**
2
+ * Rust Code Generator - String template based
3
+ *
4
+ * Philosophy:
5
+ * - String templates for file structure
6
+ * - Simple type mapping
7
+ * - Idiomatic Rust conventions
8
+ * - No complex abstraction
9
+ */
10
+
11
+ import type { CompiledSchema, Type, Struct, Field } from './schema_visitor.js';
12
+ import { toSnakeCase, toPascalCase } from './naming.js';
13
+
14
+ export class RustCodegen {
15
+ // Type mapping: Schema type -> Rust type
16
+ private mapType(type: Type): string {
17
+ switch (type.kind) {
18
+ case 'primitive':
19
+ switch (type.primitive) {
20
+ case 'bool': return 'bool';
21
+ case 'u8': return 'u8';
22
+ case 'u16': return 'u16';
23
+ case 'u32': return 'u32';
24
+ case 'u64': return 'u64';
25
+ case 'f64': return 'f64';
26
+ case 'string': return 'String';
27
+ case 'bytes': return 'Vec<u8>';
28
+ case 'field2': return '[Vec<u8>; 2]'; // Extension field (Fq2) - pair of 32-byte field elements
29
+ }
30
+ break;
31
+
32
+ case 'vector':
33
+ return `Vec<${this.mapType(type.element!)}>`;
34
+
35
+ case 'array':
36
+ const elemType = this.mapType(type.element!);
37
+ // Large arrays become Vec for ergonomics
38
+ return type.size! > 32 ? `Vec<${elemType}>` : `[${elemType}; ${type.size}]`;
39
+
40
+ case 'optional':
41
+ return `Option<${this.mapType(type.element!)}>`;
42
+
43
+ case 'struct':
44
+ // Convert struct names to PascalCase for Rust conventions
45
+ return toPascalCase(type.struct!.name);
46
+ }
47
+
48
+ return 'Unknown';
49
+ }
50
+
51
+ // Check if field needs serde(with = "serde_bytes")
52
+ private needsSerdeBytes(type: Type): boolean {
53
+ return type.kind === 'primitive' && type.primitive === 'bytes';
54
+ }
55
+
56
+ // Check if field needs serde(with = "serde_vec_bytes")
57
+ private needsSerdeVecBytes(type: Type): boolean {
58
+ return type.kind === 'vector' && this.needsSerdeBytes(type.element!);
59
+ }
60
+
61
+ // Generate struct field
62
+ private generateField(field: Field): string {
63
+ const rustName = toSnakeCase(field.name);
64
+ const rustType = this.mapType(field.type);
65
+ let attrs = '';
66
+
67
+ // Add serde rename if needed
68
+ if (field.name !== rustName) {
69
+ attrs += ` #[serde(rename = "${field.name}")]\n`;
70
+ }
71
+
72
+ // Add serde bytes handling
73
+ if (this.needsSerdeVecBytes(field.type)) {
74
+ attrs += ` #[serde(with = "serde_vec_bytes")]\n`;
75
+ } else if (this.needsSerdeBytes(field.type)) {
76
+ attrs += ` #[serde(with = "serde_bytes")]\n`;
77
+ }
78
+
79
+ return `${attrs} pub ${rustName}: ${rustType},`;
80
+ }
81
+
82
+ // Generate a struct definition
83
+ private generateStruct(struct: Struct, isCommand: boolean): string {
84
+ const rustName = toPascalCase(struct.name);
85
+ const fields = struct.fields.map(f => this.generateField(f)).join('\n');
86
+
87
+ // Add serde rename if struct name changed
88
+ const serdeRename = struct.name !== rustName
89
+ ? `\n#[serde(rename = "${struct.name}")]`
90
+ : '';
91
+
92
+ // Commands need __typename field for struct identification, but skip it during serialization
93
+ const typenameField = isCommand
94
+ ? ` #[serde(rename = "__typename", skip_serializing)]\n pub type_name: String,\n`
95
+ : '';
96
+
97
+ // Generate constructor for commands
98
+ const constructor = isCommand ? this.generateConstructor(struct, rustName) : '';
99
+
100
+ return `/// ${struct.name}
101
+ #[derive(Debug, Clone, Serialize, Deserialize)]${serdeRename}
102
+ pub struct ${rustName} {
103
+ ${typenameField}${fields}
104
+ }${constructor}`;
105
+ }
106
+
107
+ // Generate constructor for command structs
108
+ private generateConstructor(struct: Struct, rustName: string): string {
109
+ const params = struct.fields.map(f =>
110
+ `${toSnakeCase(f.name)}: ${this.mapType(f.type)}`
111
+ ).join(', ');
112
+
113
+ const fieldInits = [
114
+ ` type_name: "${struct.name}".to_string(),`,
115
+ ...struct.fields.map(f => ` ${toSnakeCase(f.name)},`),
116
+ ].join('\n');
117
+
118
+ return `
119
+
120
+ impl ${rustName} {
121
+ pub fn new(${params}) -> Self {
122
+ Self {
123
+ ${fieldInits}
124
+ }
125
+ }
126
+ }`;
127
+ }
128
+
129
+ // Generate Command enum
130
+ private generateCommandEnum(schema: CompiledSchema): string {
131
+ const names = Array.from(schema.structs.keys());
132
+ const variants = names
133
+ .map(name => {
134
+ const rustName = toPascalCase(name);
135
+ return ` ${rustName}(${rustName}),`;
136
+ })
137
+ .join('\n');
138
+
139
+ const serializeCases = names
140
+ .map(name => {
141
+ const rustName = toPascalCase(name);
142
+ return ` Command::${rustName}(data) => {
143
+ tuple.serialize_element("${name}")?;
144
+ tuple.serialize_element(data)?;
145
+ }`;
146
+ })
147
+ .join('\n');
148
+
149
+ const deserializeCases = names
150
+ .map(name => {
151
+ const rustName = toPascalCase(name);
152
+ return ` "${name}" => {
153
+ let data = seq.next_element()?
154
+ .ok_or_else(|| serde::de::Error::invalid_length(1, &self))?;
155
+ Ok(Command::${rustName}(data))
156
+ }`;
157
+ })
158
+ .join('\n');
159
+
160
+ const variantNames = names
161
+ .map(name => `"${name}"`)
162
+ .join(', ');
163
+
164
+ return `/// Command enum - wraps all possible commands
165
+ #[derive(Debug, Clone)]
166
+ pub enum Command {
167
+ ${variants}
168
+ }
169
+
170
+ impl Serialize for Command {
171
+ fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
172
+ where S: serde::Serializer {
173
+ use serde::ser::SerializeTuple;
174
+ let mut tuple = serializer.serialize_tuple(2)?;
175
+ match self {
176
+ ${serializeCases}
177
+ }
178
+ tuple.end()
179
+ }
180
+ }
181
+
182
+ impl<'de> Deserialize<'de> for Command {
183
+ fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
184
+ where D: serde::Deserializer<'de> {
185
+ use serde::de::{SeqAccess, Visitor};
186
+ struct CommandVisitor;
187
+
188
+ impl<'de> Visitor<'de> for CommandVisitor {
189
+ type Value = Command;
190
+ fn expecting(&self, formatter: &mut std::fmt::Formatter) -> std::fmt::Result {
191
+ formatter.write_str("a 2-element array [name, payload]")
192
+ }
193
+ fn visit_seq<A>(self, mut seq: A) -> Result<Self::Value, A::Error>
194
+ where A: SeqAccess<'de> {
195
+ let name: String = seq.next_element()?
196
+ .ok_or_else(|| serde::de::Error::invalid_length(0, &self))?;
197
+ match name.as_str() {
198
+ ${deserializeCases}
199
+ _ => Err(serde::de::Error::unknown_variant(&name, &[${variantNames}])),
200
+ }
201
+ }
202
+ }
203
+ deserializer.deserialize_tuple(2, CommandVisitor)
204
+ }
205
+ }`;
206
+ }
207
+
208
+ // Generate Response enum
209
+ private generateResponseEnum(schema: CompiledSchema): string {
210
+ // Include all response types from commands plus ErrorResponse if it exists
211
+ const commandResponseTypes = Array.from(new Set(schema.commands.map(c => c.responseType)));
212
+ const responseTypes = schema.responses.has('ErrorResponse')
213
+ ? [...commandResponseTypes, 'ErrorResponse']
214
+ : commandResponseTypes;
215
+ const variants = responseTypes
216
+ .map(name => {
217
+ const rustName = toPascalCase(name);
218
+ return ` ${rustName}(${rustName}),`;
219
+ })
220
+ .join('\n');
221
+
222
+ const serializeCases = responseTypes
223
+ .map(name => {
224
+ const rustName = toPascalCase(name);
225
+ return ` Response::${rustName}(data) => {
226
+ tuple.serialize_element("${name}")?;
227
+ tuple.serialize_element(data)?;
228
+ }`;
229
+ })
230
+ .join('\n');
231
+
232
+ const deserializeCases = responseTypes
233
+ .map(name => {
234
+ const rustName = toPascalCase(name);
235
+ return ` "${name}" => {
236
+ let data = seq.next_element()?
237
+ .ok_or_else(|| serde::de::Error::invalid_length(1, &self))?;
238
+ Ok(Response::${rustName}(data))
239
+ }`;
240
+ })
241
+ .join('\n');
242
+
243
+ const variantNames = responseTypes.map(name => `"${name}"`).join(', ');
244
+
245
+ return `/// Response enum - wraps all possible responses
246
+ #[derive(Debug, Clone)]
247
+ pub enum Response {
248
+ ${variants}
249
+ }
250
+
251
+ impl Serialize for Response {
252
+ fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
253
+ where S: serde::Serializer {
254
+ use serde::ser::SerializeTuple;
255
+ let mut tuple = serializer.serialize_tuple(2)?;
256
+ match self {
257
+ ${serializeCases}
258
+ }
259
+ tuple.end()
260
+ }
261
+ }
262
+
263
+ impl<'de> Deserialize<'de> for Response {
264
+ fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
265
+ where D: serde::Deserializer<'de> {
266
+ use serde::de::{SeqAccess, Visitor};
267
+ struct ResponseVisitor;
268
+
269
+ impl<'de> Visitor<'de> for ResponseVisitor {
270
+ type Value = Response;
271
+ fn expecting(&self, formatter: &mut std::fmt::Formatter) -> std::fmt::Result {
272
+ formatter.write_str("a 2-element array [name, payload]")
273
+ }
274
+ fn visit_seq<A>(self, mut seq: A) -> Result<Self::Value, A::Error>
275
+ where A: SeqAccess<'de> {
276
+ let name: String = seq.next_element()?
277
+ .ok_or_else(|| serde::de::Error::invalid_length(0, &self))?;
278
+ match name.as_str() {
279
+ ${deserializeCases}
280
+ _ => Err(serde::de::Error::unknown_variant(&name, &[${variantNames}])),
281
+ }
282
+ }
283
+ }
284
+ deserializer.deserialize_tuple(2, ResponseVisitor)
285
+ }
286
+ }`;
287
+ }
288
+
289
+ // Generate serde helper modules
290
+ private generateSerdeHelpers(): string {
291
+ return `mod serde_bytes {
292
+ use serde::{Deserialize, Deserializer, Serializer};
293
+ pub fn serialize<S>(bytes: &Vec<u8>, serializer: S) -> Result<S::Ok, S::Error>
294
+ where S: Serializer { serializer.serialize_bytes(bytes) }
295
+ pub fn deserialize<'de, D>(deserializer: D) -> Result<Vec<u8>, D::Error>
296
+ where D: Deserializer<'de> { <Vec<u8>>::deserialize(deserializer) }
297
+ }
298
+
299
+ mod serde_vec_bytes {
300
+ use serde::{Deserialize, Deserializer, Serializer, Serialize};
301
+ use serde::ser::SerializeSeq;
302
+ use serde::de::{SeqAccess, Visitor};
303
+
304
+ #[derive(Serialize, Deserialize)]
305
+ struct BytesWrapper(#[serde(with = "super::serde_bytes")] Vec<u8>);
306
+
307
+ pub fn serialize<S>(vec: &Vec<Vec<u8>>, serializer: S) -> Result<S::Ok, S::Error>
308
+ where S: Serializer {
309
+ let mut seq = serializer.serialize_seq(Some(vec.len()))?;
310
+ for bytes in vec {
311
+ seq.serialize_element(&BytesWrapper(bytes.clone()))?;
312
+ }
313
+ seq.end()
314
+ }
315
+ pub fn deserialize<'de, D>(deserializer: D) -> Result<Vec<Vec<u8>>, D::Error>
316
+ where D: Deserializer<'de> {
317
+ struct VecVecU8Visitor;
318
+ impl<'de> Visitor<'de> for VecVecU8Visitor {
319
+ type Value = Vec<Vec<u8>>;
320
+ fn expecting(&self, formatter: &mut std::fmt::Formatter) -> std::fmt::Result {
321
+ formatter.write_str("a sequence of byte arrays")
322
+ }
323
+ fn visit_seq<A>(self, mut seq: A) -> Result<Self::Value, A::Error>
324
+ where A: SeqAccess<'de> {
325
+ let mut vec = Vec::new();
326
+ while let Some(wrapper) = seq.next_element::<BytesWrapper>()? {
327
+ vec.push(wrapper.0);
328
+ }
329
+ Ok(vec)
330
+ }
331
+ }
332
+ deserializer.deserialize_seq(VecVecU8Visitor)
333
+ }
334
+ }`;
335
+ }
336
+
337
+ // Generate types file
338
+ generateTypes(schema: CompiledSchema): string {
339
+ // Create set of top-level command struct names (only these need __typename)
340
+ const commandNames = new Set(schema.commands.map(c => c.name));
341
+
342
+ // Generate all structs (commands first, then responses)
343
+ const commandStructs = Array.from(schema.structs.values())
344
+ .map(s => this.generateStruct(s, commandNames.has(s.name)))
345
+ .join('\n\n');
346
+
347
+ const responseStructs = Array.from(schema.responses.values())
348
+ .map(s => this.generateStruct(s, false))
349
+ .join('\n\n');
350
+
351
+ return `//! AUTOGENERATED - DO NOT EDIT
352
+ //! Generated from Barretenberg msgpack schema
353
+
354
+ use serde::{Deserialize, Serialize};
355
+
356
+ ${this.generateSerdeHelpers()}
357
+
358
+ ${commandStructs}
359
+
360
+ ${responseStructs}
361
+
362
+ ${this.generateCommandEnum(schema)}
363
+
364
+ ${this.generateResponseEnum(schema)}
365
+ `;
366
+ }
367
+
368
+ // Generate API method
369
+ private generateApiMethod(command: {name: string, fields: Field[], responseType: string}): string {
370
+ const methodName = toSnakeCase(command.name);
371
+ const cmdRustName = toPascalCase(command.name);
372
+ const respRustName = toPascalCase(command.responseType);
373
+
374
+ const params = command.fields.map(f => {
375
+ const rustType = this.mapType(f.type);
376
+ // Only convert simple Vec<u8> to &[u8], not nested types
377
+ const apiType = rustType === 'Vec<u8>' ? '&[u8]' : rustType;
378
+ return `${toSnakeCase(f.name)}: ${apiType}`;
379
+ }).join(', ');
380
+
381
+ const paramConversions = command.fields.map(f => {
382
+ const name = toSnakeCase(f.name);
383
+ const rustType = this.mapType(f.type);
384
+ // Only convert slices back to Vec
385
+ if (rustType === 'Vec<u8>') {
386
+ return `${name}.to_vec()`;
387
+ }
388
+ return name;
389
+ }).join(', ');
390
+
391
+ return ` /// Execute ${command.name} command
392
+ pub fn ${methodName}(&mut self, ${params}) -> Result<${respRustName}> {
393
+ let cmd = Command::${cmdRustName}(${cmdRustName}::new(${paramConversions}));
394
+ match self.execute(cmd)? {
395
+ Response::${respRustName}(resp) => Ok(resp),
396
+ Response::ErrorResponse(err) => Err(BarretenbergError::Backend(
397
+ err.message
398
+ )),
399
+ _ => Err(BarretenbergError::InvalidResponse(
400
+ "Expected ${command.responseType}".to_string()
401
+ )),
402
+ }
403
+ }`;
404
+ }
405
+
406
+ // Generate API file
407
+ generateApi(schema: CompiledSchema): string {
408
+ const apiMethods = schema.commands
409
+ .filter(c => c.name !== 'Shutdown')
410
+ .map(c => this.generateApiMethod(c))
411
+ .join('\n\n');
412
+
413
+ return `//! AUTOGENERATED - DO NOT EDIT
414
+ //! High-level Barretenberg API - msgpack details hidden
415
+
416
+ use crate::backend::Backend;
417
+ use crate::error::{BarretenbergError, Result};
418
+ use crate::generated_types::*;
419
+
420
+ /// High-level Barretenberg API
421
+ pub struct BarretenbergApi<B: Backend> {
422
+ backend: B,
423
+ }
424
+
425
+ impl<B: Backend> BarretenbergApi<B> {
426
+ /// Create API with custom backend
427
+ pub fn new(backend: B) -> Self {
428
+ Self { backend }
429
+ }
430
+
431
+ fn execute(&mut self, command: Command) -> Result<Response> {
432
+ let input_buffer = rmp_serde::to_vec_named(&vec![command])
433
+ .map_err(|e| BarretenbergError::Serialization(e.to_string()))?;
434
+
435
+ let output_buffer = self.backend.call(&input_buffer)?;
436
+
437
+ let response: Response = rmp_serde::from_slice(&output_buffer)
438
+ .map_err(|e| BarretenbergError::Deserialization(e.to_string()))?;
439
+
440
+ Ok(response)
441
+ }
442
+
443
+ ${apiMethods}
444
+
445
+ /// Shutdown backend gracefully
446
+ pub fn shutdown(&mut self) -> Result<()> {
447
+ let cmd = Command::Shutdown(Shutdown::new());
448
+ let _ = self.execute(cmd)?;
449
+ self.backend.destroy()
450
+ }
451
+
452
+ /// Destroy backend without shutdown command
453
+ pub fn destroy(&mut self) -> Result<()> {
454
+ self.backend.destroy()
455
+ }
456
+ }
457
+ `;
458
+ }
459
+ }