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

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 (187) 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 +49 -17
  10. package/dest/browser/barretenberg/backend.d.ts.map +1 -1
  11. package/dest/browser/barretenberg/backend.js +109 -9
  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 +765 -1672
  24. package/dest/browser/cbind/generated/api_types.d.ts.map +1 -1
  25. package/dest/browser/cbind/generated/api_types.js +1453 -1525
  26. package/dest/browser/cbind/generated/async.d.ts +3 -5
  27. package/dest/browser/cbind/generated/async.d.ts.map +1 -1
  28. package/dest/browser/cbind/generated/async.js +13 -33
  29. package/dest/browser/cbind/generated/sync.d.ts +3 -5
  30. package/dest/browser/cbind/generated/sync.d.ts.map +1 -1
  31. package/dest/browser/cbind/generated/sync.js +13 -31
  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 +26 -0
  36. package/dest/browser/cbind/rust_codegen.d.ts.map +1 -0
  37. package/dest/browser/cbind/rust_codegen.js +461 -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 +49 -17
  48. package/dest/node/barretenberg/backend.d.ts.map +1 -1
  49. package/dest/node/barretenberg/backend.js +109 -9
  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 +40 -21
  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 +17 -21
  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 +7 -5
  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 +765 -1672
  79. package/dest/node/cbind/generated/api_types.d.ts.map +1 -1
  80. package/dest/node/cbind/generated/api_types.js +1453 -1525
  81. package/dest/node/cbind/generated/async.d.ts +3 -5
  82. package/dest/node/cbind/generated/async.d.ts.map +1 -1
  83. package/dest/node/cbind/generated/async.js +13 -33
  84. package/dest/node/cbind/generated/sync.d.ts +3 -5
  85. package/dest/node/cbind/generated/sync.d.ts.map +1 -1
  86. package/dest/node/cbind/generated/sync.js +13 -31
  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 +26 -0
  91. package/dest/node/cbind/rust_codegen.d.ts.map +1 -0
  92. package/dest/node/cbind/rust_codegen.js +461 -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 +49 -17
  103. package/dest/node-cjs/barretenberg/backend.d.ts.map +1 -1
  104. package/dest/node-cjs/barretenberg/backend.js +111 -9
  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 +39 -20
  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 +17 -21
  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 +7 -5
  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 +765 -1672
  134. package/dest/node-cjs/cbind/generated/api_types.d.ts.map +1 -1
  135. package/dest/node-cjs/cbind/generated/api_types.js +1662 -1742
  136. package/dest/node-cjs/cbind/generated/async.d.ts +3 -5
  137. package/dest/node-cjs/cbind/generated/async.d.ts.map +1 -1
  138. package/dest/node-cjs/cbind/generated/async.js +12 -32
  139. package/dest/node-cjs/cbind/generated/sync.d.ts +3 -5
  140. package/dest/node-cjs/cbind/generated/sync.d.ts.map +1 -1
  141. package/dest/node-cjs/cbind/generated/sync.js +12 -30
  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 +26 -0
  146. package/dest/node-cjs/cbind/rust_codegen.d.ts.map +1 -0
  147. package/dest/node-cjs/cbind/rust_codegen.js +465 -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 +149 -23
  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 +38 -19
  165. package/src/bb_backends/node/native_shm_async.ts +15 -19
  166. package/src/bb_backends/node/native_socket.ts +7 -5
  167. package/src/bb_backends/node/platform.ts +6 -1
  168. package/src/cbind/generate.ts +51 -32
  169. package/src/cbind/naming.ts +27 -0
  170. package/src/cbind/rust_codegen.ts +504 -0
  171. package/src/cbind/schema_visitor.ts +219 -0
  172. package/src/cbind/typescript_codegen.ts +419 -0
  173. package/src/index.ts +4 -0
  174. package/dest/browser/cbind/schema_compiler.d.ts +0 -68
  175. package/dest/browser/cbind/schema_compiler.d.ts.map +0 -1
  176. package/dest/browser/cbind/schema_compiler.js +0 -600
  177. package/dest/node/cbind/schema_compiler.d.ts +0 -68
  178. package/dest/node/cbind/schema_compiler.d.ts.map +0 -1
  179. package/dest/node/cbind/schema_compiler.js +0 -600
  180. package/dest/node-cjs/cbind/schema_compiler.d.ts +0 -68
  181. package/dest/node-cjs/cbind/schema_compiler.d.ts.map +0 -1
  182. package/dest/node-cjs/cbind/schema_compiler.js +0 -607
  183. package/src/cbind/generated/api_types.ts +0 -4241
  184. package/src/cbind/generated/async.ts +0 -717
  185. package/src/cbind/generated/curve_constants.ts +0 -53
  186. package/src/cbind/generated/sync.ts +0 -663
  187. package/src/cbind/schema_compiler.ts +0 -745
@@ -0,0 +1,465 @@
1
+ "use strict";
2
+ /**
3
+ * Rust Code Generator - String template based
4
+ *
5
+ * Philosophy:
6
+ * - String templates for file structure
7
+ * - Simple type mapping
8
+ * - Idiomatic Rust conventions
9
+ * - No complex abstraction
10
+ */
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.RustCodegen = void 0;
13
+ const naming_js_1 = require("./naming.js");
14
+ class RustCodegen {
15
+ // Type mapping: Schema type -> Rust type
16
+ mapType(type) {
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
+ case 'vector':
32
+ return `Vec<${this.mapType(type.element)}>`;
33
+ case 'array':
34
+ const elemType = this.mapType(type.element);
35
+ // Large arrays become Vec for ergonomics
36
+ return type.size > 32 ? `Vec<${elemType}>` : `[${elemType}; ${type.size}]`;
37
+ case 'optional':
38
+ return `Option<${this.mapType(type.element)}>`;
39
+ case 'struct':
40
+ // Convert struct names to PascalCase for Rust conventions
41
+ return (0, naming_js_1.toPascalCase)(type.struct.name);
42
+ }
43
+ return 'Unknown';
44
+ }
45
+ // Check if field needs serde(with = "serde_bytes")
46
+ needsSerdeBytes(type) {
47
+ return type.kind === 'primitive' && type.primitive === 'bytes';
48
+ }
49
+ // Check if field needs serde(with = "serde_vec_bytes")
50
+ needsSerdeVecBytes(type) {
51
+ return type.kind === 'vector' && this.needsSerdeBytes(type.element);
52
+ }
53
+ // Check if field needs serde(with = "serde_array4_bytes") - for [Vec<u8>; 4] (Poseidon2 state)
54
+ needsSerdeArray4Bytes(type) {
55
+ return type.kind === 'array' && type.size === 4 && this.needsSerdeBytes(type.element);
56
+ }
57
+ // Generate struct field
58
+ generateField(field) {
59
+ const rustName = (0, naming_js_1.toSnakeCase)(field.name);
60
+ const rustType = this.mapType(field.type);
61
+ let attrs = '';
62
+ // Add serde rename if needed
63
+ if (field.name !== rustName) {
64
+ attrs += ` #[serde(rename = "${field.name}")]\n`;
65
+ }
66
+ // Add serde bytes handling
67
+ if (this.needsSerdeArray4Bytes(field.type)) {
68
+ attrs += ` #[serde(with = "serde_array4_bytes")]\n`;
69
+ }
70
+ else if (this.needsSerdeVecBytes(field.type)) {
71
+ attrs += ` #[serde(with = "serde_vec_bytes")]\n`;
72
+ }
73
+ else if (this.needsSerdeBytes(field.type)) {
74
+ attrs += ` #[serde(with = "serde_bytes")]\n`;
75
+ }
76
+ return `${attrs} pub ${rustName}: ${rustType},`;
77
+ }
78
+ // Generate a struct definition
79
+ generateStruct(struct, isCommand) {
80
+ const rustName = (0, naming_js_1.toPascalCase)(struct.name);
81
+ const fields = struct.fields.map(f => this.generateField(f)).join('\n');
82
+ // Add serde rename if struct name changed
83
+ const serdeRename = struct.name !== rustName
84
+ ? `\n#[serde(rename = "${struct.name}")]`
85
+ : '';
86
+ // Commands need __typename field for struct identification, but skip it during serialization
87
+ const typenameField = isCommand
88
+ ? ` #[serde(rename = "__typename", skip_serializing)]\n pub type_name: String,\n`
89
+ : '';
90
+ // Generate constructor for commands
91
+ const constructor = isCommand ? this.generateConstructor(struct, rustName) : '';
92
+ return `/// ${struct.name}
93
+ #[derive(Debug, Clone, Serialize, Deserialize)]${serdeRename}
94
+ pub struct ${rustName} {
95
+ ${typenameField}${fields}
96
+ }${constructor}`;
97
+ }
98
+ // Generate constructor for command structs
99
+ generateConstructor(struct, rustName) {
100
+ const params = struct.fields.map(f => `${(0, naming_js_1.toSnakeCase)(f.name)}: ${this.mapType(f.type)}`).join(', ');
101
+ const fieldInits = [
102
+ ` type_name: "${struct.name}".to_string(),`,
103
+ ...struct.fields.map(f => ` ${(0, naming_js_1.toSnakeCase)(f.name)},`),
104
+ ].join('\n');
105
+ return `
106
+
107
+ impl ${rustName} {
108
+ pub fn new(${params}) -> Self {
109
+ Self {
110
+ ${fieldInits}
111
+ }
112
+ }
113
+ }`;
114
+ }
115
+ // Generate Command enum
116
+ generateCommandEnum(schema) {
117
+ const names = Array.from(schema.structs.keys());
118
+ const variants = names
119
+ .map(name => {
120
+ const rustName = (0, naming_js_1.toPascalCase)(name);
121
+ return ` ${rustName}(${rustName}),`;
122
+ })
123
+ .join('\n');
124
+ const serializeCases = names
125
+ .map(name => {
126
+ const rustName = (0, naming_js_1.toPascalCase)(name);
127
+ return ` Command::${rustName}(data) => {
128
+ tuple.serialize_element("${name}")?;
129
+ tuple.serialize_element(data)?;
130
+ }`;
131
+ })
132
+ .join('\n');
133
+ const deserializeCases = names
134
+ .map(name => {
135
+ const rustName = (0, naming_js_1.toPascalCase)(name);
136
+ return ` "${name}" => {
137
+ let data = seq.next_element()?
138
+ .ok_or_else(|| serde::de::Error::invalid_length(1, &self))?;
139
+ Ok(Command::${rustName}(data))
140
+ }`;
141
+ })
142
+ .join('\n');
143
+ const variantNames = names
144
+ .map(name => `"${name}"`)
145
+ .join(', ');
146
+ return `/// Command enum - wraps all possible commands
147
+ #[derive(Debug, Clone)]
148
+ pub enum Command {
149
+ ${variants}
150
+ }
151
+
152
+ impl Serialize for Command {
153
+ fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
154
+ where S: serde::Serializer {
155
+ use serde::ser::SerializeTuple;
156
+ let mut tuple = serializer.serialize_tuple(2)?;
157
+ match self {
158
+ ${serializeCases}
159
+ }
160
+ tuple.end()
161
+ }
162
+ }
163
+
164
+ impl<'de> Deserialize<'de> for Command {
165
+ fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
166
+ where D: serde::Deserializer<'de> {
167
+ use serde::de::{SeqAccess, Visitor};
168
+ struct CommandVisitor;
169
+
170
+ impl<'de> Visitor<'de> for CommandVisitor {
171
+ type Value = Command;
172
+ fn expecting(&self, formatter: &mut std::fmt::Formatter) -> std::fmt::Result {
173
+ formatter.write_str("a 2-element array [name, payload]")
174
+ }
175
+ fn visit_seq<A>(self, mut seq: A) -> Result<Self::Value, A::Error>
176
+ where A: SeqAccess<'de> {
177
+ let name: String = seq.next_element()?
178
+ .ok_or_else(|| serde::de::Error::invalid_length(0, &self))?;
179
+ match name.as_str() {
180
+ ${deserializeCases}
181
+ _ => Err(serde::de::Error::unknown_variant(&name, &[${variantNames}])),
182
+ }
183
+ }
184
+ }
185
+ deserializer.deserialize_tuple(2, CommandVisitor)
186
+ }
187
+ }`;
188
+ }
189
+ // Generate Response enum
190
+ generateResponseEnum(schema) {
191
+ // Include all response types from commands plus ErrorResponse if it exists
192
+ const commandResponseTypes = Array.from(new Set(schema.commands.map(c => c.responseType)));
193
+ const responseTypes = schema.responses.has('ErrorResponse')
194
+ ? [...commandResponseTypes, 'ErrorResponse']
195
+ : commandResponseTypes;
196
+ const variants = responseTypes
197
+ .map(name => {
198
+ const rustName = (0, naming_js_1.toPascalCase)(name);
199
+ return ` ${rustName}(${rustName}),`;
200
+ })
201
+ .join('\n');
202
+ const serializeCases = responseTypes
203
+ .map(name => {
204
+ const rustName = (0, naming_js_1.toPascalCase)(name);
205
+ return ` Response::${rustName}(data) => {
206
+ tuple.serialize_element("${name}")?;
207
+ tuple.serialize_element(data)?;
208
+ }`;
209
+ })
210
+ .join('\n');
211
+ const deserializeCases = responseTypes
212
+ .map(name => {
213
+ const rustName = (0, naming_js_1.toPascalCase)(name);
214
+ return ` "${name}" => {
215
+ let data = seq.next_element()?
216
+ .ok_or_else(|| serde::de::Error::invalid_length(1, &self))?;
217
+ Ok(Response::${rustName}(data))
218
+ }`;
219
+ })
220
+ .join('\n');
221
+ const variantNames = responseTypes.map(name => `"${name}"`).join(', ');
222
+ return `/// Response enum - wraps all possible responses
223
+ #[derive(Debug, Clone)]
224
+ pub enum Response {
225
+ ${variants}
226
+ }
227
+
228
+ impl Serialize for Response {
229
+ fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
230
+ where S: serde::Serializer {
231
+ use serde::ser::SerializeTuple;
232
+ let mut tuple = serializer.serialize_tuple(2)?;
233
+ match self {
234
+ ${serializeCases}
235
+ }
236
+ tuple.end()
237
+ }
238
+ }
239
+
240
+ impl<'de> Deserialize<'de> for Response {
241
+ fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
242
+ where D: serde::Deserializer<'de> {
243
+ use serde::de::{SeqAccess, Visitor};
244
+ struct ResponseVisitor;
245
+
246
+ impl<'de> Visitor<'de> for ResponseVisitor {
247
+ type Value = Response;
248
+ fn expecting(&self, formatter: &mut std::fmt::Formatter) -> std::fmt::Result {
249
+ formatter.write_str("a 2-element array [name, payload]")
250
+ }
251
+ fn visit_seq<A>(self, mut seq: A) -> Result<Self::Value, A::Error>
252
+ where A: SeqAccess<'de> {
253
+ let name: String = seq.next_element()?
254
+ .ok_or_else(|| serde::de::Error::invalid_length(0, &self))?;
255
+ match name.as_str() {
256
+ ${deserializeCases}
257
+ _ => Err(serde::de::Error::unknown_variant(&name, &[${variantNames}])),
258
+ }
259
+ }
260
+ }
261
+ deserializer.deserialize_tuple(2, ResponseVisitor)
262
+ }
263
+ }`;
264
+ }
265
+ // Generate serde helper modules
266
+ generateSerdeHelpers() {
267
+ return `mod serde_bytes {
268
+ use serde::{Deserialize, Deserializer, Serializer};
269
+ pub fn serialize<S>(bytes: &Vec<u8>, serializer: S) -> Result<S::Ok, S::Error>
270
+ where S: Serializer { serializer.serialize_bytes(bytes) }
271
+ pub fn deserialize<'de, D>(deserializer: D) -> Result<Vec<u8>, D::Error>
272
+ where D: Deserializer<'de> { <Vec<u8>>::deserialize(deserializer) }
273
+ }
274
+
275
+ mod serde_vec_bytes {
276
+ use serde::{Deserialize, Deserializer, Serializer, Serialize};
277
+ use serde::ser::SerializeSeq;
278
+ use serde::de::{SeqAccess, Visitor};
279
+
280
+ #[derive(Serialize, Deserialize)]
281
+ struct BytesWrapper(#[serde(with = "super::serde_bytes")] Vec<u8>);
282
+
283
+ pub fn serialize<S>(vec: &Vec<Vec<u8>>, serializer: S) -> Result<S::Ok, S::Error>
284
+ where S: Serializer {
285
+ let mut seq = serializer.serialize_seq(Some(vec.len()))?;
286
+ for bytes in vec {
287
+ seq.serialize_element(&BytesWrapper(bytes.clone()))?;
288
+ }
289
+ seq.end()
290
+ }
291
+ pub fn deserialize<'de, D>(deserializer: D) -> Result<Vec<Vec<u8>>, D::Error>
292
+ where D: Deserializer<'de> {
293
+ struct VecVecU8Visitor;
294
+ impl<'de> Visitor<'de> for VecVecU8Visitor {
295
+ type Value = Vec<Vec<u8>>;
296
+ fn expecting(&self, formatter: &mut std::fmt::Formatter) -> std::fmt::Result {
297
+ formatter.write_str("a sequence of byte arrays")
298
+ }
299
+ fn visit_seq<A>(self, mut seq: A) -> Result<Self::Value, A::Error>
300
+ where A: SeqAccess<'de> {
301
+ let mut vec = Vec::new();
302
+ while let Some(wrapper) = seq.next_element::<BytesWrapper>()? {
303
+ vec.push(wrapper.0);
304
+ }
305
+ Ok(vec)
306
+ }
307
+ }
308
+ deserializer.deserialize_seq(VecVecU8Visitor)
309
+ }
310
+ }
311
+
312
+ mod serde_array4_bytes {
313
+ use serde::{Deserialize, Deserializer, Serialize, Serializer};
314
+ use serde::ser::SerializeTuple;
315
+ use serde::de::{SeqAccess, Visitor};
316
+
317
+ #[derive(Serialize, Deserialize)]
318
+ struct BytesWrapper(#[serde(with = "super::serde_bytes")] Vec<u8>);
319
+
320
+ pub fn serialize<S>(arr: &[Vec<u8>; 4], serializer: S) -> Result<S::Ok, S::Error>
321
+ where S: Serializer {
322
+ let mut tup = serializer.serialize_tuple(4)?;
323
+ for bytes in arr {
324
+ tup.serialize_element(&BytesWrapper(bytes.clone()))?;
325
+ }
326
+ tup.end()
327
+ }
328
+ pub fn deserialize<'de, D>(deserializer: D) -> Result<[Vec<u8>; 4], D::Error>
329
+ where D: Deserializer<'de> {
330
+ struct Array4Visitor;
331
+ impl<'de> Visitor<'de> for Array4Visitor {
332
+ type Value = [Vec<u8>; 4];
333
+ fn expecting(&self, formatter: &mut std::fmt::Formatter) -> std::fmt::Result {
334
+ formatter.write_str("an array of 4 byte arrays")
335
+ }
336
+ fn visit_seq<A>(self, mut seq: A) -> Result<Self::Value, A::Error>
337
+ where A: SeqAccess<'de> {
338
+ let mut arr: [Vec<u8>; 4] = Default::default();
339
+ for (i, item) in arr.iter_mut().enumerate() {
340
+ *item = seq.next_element::<BytesWrapper>()?
341
+ .ok_or_else(|| serde::de::Error::invalid_length(i, &self))?.0;
342
+ }
343
+ Ok(arr)
344
+ }
345
+ }
346
+ deserializer.deserialize_tuple(4, Array4Visitor)
347
+ }
348
+ }`;
349
+ }
350
+ // Generate types file
351
+ generateTypes(schema) {
352
+ // Create set of top-level command struct names (only these need __typename)
353
+ const commandNames = new Set(schema.commands.map(c => c.name));
354
+ // Generate all structs (commands first, then responses)
355
+ const commandStructs = Array.from(schema.structs.values())
356
+ .map(s => this.generateStruct(s, commandNames.has(s.name)))
357
+ .join('\n\n');
358
+ const responseStructs = Array.from(schema.responses.values())
359
+ .map(s => this.generateStruct(s, false))
360
+ .join('\n\n');
361
+ return `//! AUTOGENERATED - DO NOT EDIT
362
+ //! Generated from Barretenberg msgpack schema
363
+
364
+ use serde::{Deserialize, Serialize};
365
+
366
+ ${this.generateSerdeHelpers()}
367
+
368
+ ${commandStructs}
369
+
370
+ ${responseStructs}
371
+
372
+ ${this.generateCommandEnum(schema)}
373
+
374
+ ${this.generateResponseEnum(schema)}
375
+ `;
376
+ }
377
+ // Generate API method
378
+ generateApiMethod(command) {
379
+ const methodName = (0, naming_js_1.toSnakeCase)(command.name);
380
+ const cmdRustName = (0, naming_js_1.toPascalCase)(command.name);
381
+ const respRustName = (0, naming_js_1.toPascalCase)(command.responseType);
382
+ const params = command.fields.map(f => {
383
+ const rustType = this.mapType(f.type);
384
+ // Only convert simple Vec<u8> to &[u8], not nested types
385
+ const apiType = rustType === 'Vec<u8>' ? '&[u8]' : rustType;
386
+ return `${(0, naming_js_1.toSnakeCase)(f.name)}: ${apiType}`;
387
+ }).join(', ');
388
+ const paramConversions = command.fields.map(f => {
389
+ const name = (0, naming_js_1.toSnakeCase)(f.name);
390
+ const rustType = this.mapType(f.type);
391
+ // Only convert slices back to Vec
392
+ if (rustType === 'Vec<u8>') {
393
+ return `${name}.to_vec()`;
394
+ }
395
+ return name;
396
+ }).join(', ');
397
+ return ` /// Execute ${command.name} command
398
+ pub fn ${methodName}(&mut self, ${params}) -> Result<${respRustName}> {
399
+ let cmd = Command::${cmdRustName}(${cmdRustName}::new(${paramConversions}));
400
+ match self.execute(cmd)? {
401
+ Response::${respRustName}(resp) => Ok(resp),
402
+ Response::ErrorResponse(err) => Err(BarretenbergError::Backend(
403
+ err.message
404
+ )),
405
+ _ => Err(BarretenbergError::InvalidResponse(
406
+ "Expected ${command.responseType}".to_string()
407
+ )),
408
+ }
409
+ }`;
410
+ }
411
+ // Generate API file
412
+ generateApi(schema) {
413
+ const apiMethods = schema.commands
414
+ .filter(c => c.name !== 'Shutdown')
415
+ .map(c => this.generateApiMethod(c))
416
+ .join('\n\n');
417
+ return `//! AUTOGENERATED - DO NOT EDIT
418
+ //! High-level Barretenberg API - msgpack details hidden
419
+
420
+ use crate::backend::Backend;
421
+ use crate::error::{BarretenbergError, Result};
422
+ use crate::generated_types::*;
423
+
424
+ /// High-level Barretenberg API
425
+ pub struct BarretenbergApi<B: Backend> {
426
+ backend: B,
427
+ }
428
+
429
+ impl<B: Backend> BarretenbergApi<B> {
430
+ /// Create API with custom backend
431
+ pub fn new(backend: B) -> Self {
432
+ Self { backend }
433
+ }
434
+
435
+ fn execute(&mut self, command: Command) -> Result<Response> {
436
+ let input_buffer = rmp_serde::to_vec_named(&vec![command])
437
+ .map_err(|e| BarretenbergError::Serialization(e.to_string()))?;
438
+
439
+ let output_buffer = self.backend.call(&input_buffer)?;
440
+
441
+ let response: Response = rmp_serde::from_slice(&output_buffer)
442
+ .map_err(|e| BarretenbergError::Deserialization(e.to_string()))?;
443
+
444
+ Ok(response)
445
+ }
446
+
447
+ ${apiMethods}
448
+
449
+ /// Shutdown backend gracefully
450
+ pub fn shutdown(&mut self) -> Result<()> {
451
+ let cmd = Command::Shutdown(Shutdown::new());
452
+ let _ = self.execute(cmd)?;
453
+ self.backend.destroy()
454
+ }
455
+
456
+ /// Destroy backend without shutdown command
457
+ pub fn destroy(&mut self) -> Result<()> {
458
+ self.backend.destroy()
459
+ }
460
+ }
461
+ `;
462
+ }
463
+ }
464
+ exports.RustCodegen = RustCodegen;
465
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicnVzdF9jb2RlZ2VuLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2NiaW5kL3J1c3RfY29kZWdlbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7Ozs7Ozs7O0dBUUc7OztBQUdILDJDQUF3RDtBQUV4RDtJQUNFLHlDQUF5QztJQUNqQyxPQUFPLENBQUMsSUFBVSxFQUFVO1FBQ2xDLFFBQVEsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO1lBQ2xCLEtBQUssV0FBVztnQkFDZCxRQUFRLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztvQkFDdkIsS0FBSyxNQUFNLEVBQUUsT0FBTyxNQUFNLENBQUM7b0JBQzNCLEtBQUssSUFBSSxFQUFFLE9BQU8sSUFBSSxDQUFDO29CQUN2QixLQUFLLEtBQUssRUFBRSxPQUFPLEtBQUssQ0FBQztvQkFDekIsS0FBSyxLQUFLLEVBQUUsT0FBTyxLQUFLLENBQUM7b0JBQ3pCLEtBQUssS0FBSyxFQUFFLE9BQU8sS0FBSyxDQUFDO29CQUN6QixLQUFLLEtBQUssRUFBRSxPQUFPLEtBQUssQ0FBQztvQkFDekIsS0FBSyxRQUFRLEVBQUUsT0FBTyxRQUFRLENBQUM7b0JBQy9CLEtBQUssT0FBTyxFQUFFLE9BQU8sU0FBUyxDQUFDO29CQUMvQixLQUFLLFFBQVEsRUFBRSxPQUFPLGNBQWMsQ0FBQyxDQUFFLHlEQUF5RDtnQkFDbEcsQ0FBQztnQkFDRCxNQUFNO1lBRVIsS0FBSyxRQUFRO2dCQUNYLE9BQU8sT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxPQUFRLENBQUMsR0FBRyxDQUFDO1lBRS9DLEtBQUssT0FBTztnQkFDVixNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxPQUFRLENBQUMsQ0FBQztnQkFDN0MseUNBQXlDO2dCQUN6QyxPQUFPLElBQUksQ0FBQyxJQUFLLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxPQUFPLFFBQVEsR0FB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
@@ -0,0 +1,47 @@
1
+ /**
2
+ * Schema Visitor - Minimal abstraction over raw msgpack schema
3
+ *
4
+ * Philosophy:
5
+ * - Keep raw schema structure
6
+ * - Resolve type references into a graph
7
+ * - No normalization - languages handle their own conventions
8
+ * - Output is "compiled schema" with resolved types
9
+ */
10
+ export type PrimitiveType = 'bool' | 'u8' | 'u16' | 'u32' | 'u64' | 'f64' | 'string' | 'bytes' | 'field2';
11
+ export interface Type {
12
+ kind: 'primitive' | 'vector' | 'array' | 'optional' | 'struct';
13
+ primitive?: PrimitiveType;
14
+ element?: Type;
15
+ size?: number;
16
+ struct?: Struct;
17
+ }
18
+ export interface Field {
19
+ name: string;
20
+ type: Type;
21
+ }
22
+ export interface Struct {
23
+ name: string;
24
+ fields: Field[];
25
+ }
26
+ export interface Command {
27
+ name: string;
28
+ fields: Field[];
29
+ responseType: string;
30
+ }
31
+ export interface CompiledSchema {
32
+ structs: Map<string, Struct>;
33
+ commands: Command[];
34
+ responses: Map<string, Struct>;
35
+ }
36
+ /**
37
+ * SchemaVisitor - Walks raw msgpack schema and resolves references
38
+ */
39
+ export declare class SchemaVisitor {
40
+ private structs;
41
+ private responses;
42
+ visit(commandsSchema: any, responsesSchema: any): CompiledSchema;
43
+ private visitStruct;
44
+ private visitType;
45
+ private resolvePrimitive;
46
+ }
47
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2NoZW1hX3Zpc2l0b3IuZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jYmluZC9zY2hlbWFfdmlzaXRvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7R0FRRztBQUVILE1BQU0sTUFBTSxhQUFhLEdBQUcsTUFBTSxHQUFHLElBQUksR0FBRyxLQUFLLEdBQUcsS0FBSyxHQUFHLEtBQUssR0FBRyxLQUFLLEdBQUcsUUFBUSxHQUFHLE9BQU8sR0FBRyxRQUFRLENBQUM7QUFFMUcsTUFBTSxXQUFXLElBQUk7SUFDbkIsSUFBSSxFQUFFLFdBQVcsR0FBRyxRQUFRLEdBQUcsT0FBTyxHQUFHLFVBQVUsR0FBRyxRQUFRLENBQUM7SUFDL0QsU0FBUyxDQUFDLEVBQUUsYUFBYSxDQUFDO0lBQzFCLE9BQU8sQ0FBQyxFQUFFLElBQUksQ0FBQztJQUNmLElBQUksQ0FBQyxFQUFFLE1BQU0sQ0FBQztJQUNkLE1BQU0sQ0FBQyxFQUFFLE1BQU0sQ0FBQztDQUNqQjtBQUVELE1BQU0sV0FBVyxLQUFLO0lBQ3BCLElBQUksRUFBRSxNQUFNLENBQUM7SUFDYixJQUFJLEVBQUUsSUFBSSxDQUFDO0NBQ1o7QUFFRCxNQUFNLFdBQVcsTUFBTTtJQUNyQixJQUFJLEVBQUUsTUFBTSxDQUFDO0lBQ2IsTUFBTSxFQUFFLEtBQUssRUFBRSxDQUFDO0NBQ2pCO0FBRUQsTUFBTSxXQUFXLE9BQU87SUFDdEIsSUFBSSxFQUFFLE1BQU0sQ0FBQztJQUNiLE1BQU0sRUFBRSxLQUFLLEVBQUUsQ0FBQztJQUNoQixZQUFZLEVBQUUsTUFBTSxDQUFDO0NBQ3RCO0FBRUQsTUFBTSxXQUFXLGNBQWM7SUFFN0IsT0FBTyxFQUFFLEdBQUcsQ0FBQyxNQUFNLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFHN0IsUUFBUSxFQUFFLE9BQU8sRUFBRSxDQUFDO0lBR3BCLFNBQVMsRUFBRSxHQUFHLENBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0NBQ2hDO0FBRUQ7O0dBRUc7QUFDSCxxQkFBYSxhQUFhO0lBQ3hCLE9BQU8sQ0FBQyxPQUFPLENBQTZCO0lBQzVDLE9BQU8sQ0FBQyxTQUFTLENBQTZCO0lBRTlDLEtBQUssQ0FBQyxjQUFjLEVBQUUsR0FBRyxFQUFFLGVBQWUsRUFBRSxHQUFHLEdBQUcsY0FBYyxDQTJDL0Q7SUFFRCxPQUFPLENBQUMsV0FBVztJQWdCbkIsT0FBTyxDQUFDLFNBQVM7SUE2RWpCLE9BQU8sQ0FBQyxnQkFBZ0I7Q0EwQnpCIn0=
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema_visitor.d.ts","sourceRoot":"","sources":["../../../src/cbind/schema_visitor.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,MAAM,MAAM,aAAa,GAAG,MAAM,GAAG,IAAI,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,GAAG,QAAQ,GAAG,OAAO,GAAG,QAAQ,CAAC;AAE1G,MAAM,WAAW,IAAI;IACnB,IAAI,EAAE,WAAW,GAAG,QAAQ,GAAG,OAAO,GAAG,UAAU,GAAG,QAAQ,CAAC;IAC/D,SAAS,CAAC,EAAE,aAAa,CAAC;IAC1B,OAAO,CAAC,EAAE,IAAI,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,KAAK;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,IAAI,CAAC;CACZ;AAED,MAAM,WAAW,MAAM;IACrB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,KAAK,EAAE,CAAC;CACjB;AAED,MAAM,WAAW,OAAO;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,KAAK,EAAE,CAAC;IAChB,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,cAAc;IAE7B,OAAO,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAG7B,QAAQ,EAAE,OAAO,EAAE,CAAC;IAGpB,SAAS,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAChC;AAED;;GAEG;AACH,qBAAa,aAAa;IACxB,OAAO,CAAC,OAAO,CAA6B;IAC5C,OAAO,CAAC,SAAS,CAA6B;IAE9C,KAAK,CAAC,cAAc,EAAE,GAAG,EAAE,eAAe,EAAE,GAAG,GAAG,cAAc,CA2C/D;IAED,OAAO,CAAC,WAAW;IAgBnB,OAAO,CAAC,SAAS;IA6EjB,OAAO,CAAC,gBAAgB;CA0BzB"}