skir-rust-gen 0.1.0 → 0.1.2

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.
package/README.md CHANGED
@@ -0,0 +1,368 @@
1
+ [![npm](https://img.shields.io/npm/v/skir-rust-gen)](https://www.npmjs.com/package/skir-rust-gen)
2
+ [![build](https://github.com/gepheum/skir-rust-gen/workflows/Build/badge.svg)](https://github.com/gepheum/skir-rust-gen/actions)
3
+
4
+ # Skir's Rust code generator
5
+
6
+ Official plugin for generating Rust code from [.skir](https://github.com/gepheum/skir) files.
7
+
8
+ Targets Rust edition 2021 and higher.
9
+
10
+ ## Set up
11
+
12
+ In your `skir.yml` file, add the following snippet under `generators`:
13
+ ```yaml
14
+ - mod: skir-rust-gen
15
+ outDir: ./src/skirout
16
+ config: {}
17
+ ```
18
+
19
+ The generated Rust code has a runtime dependency on the `skir-client` crate. Add it to your `Cargo.toml` with:
20
+
21
+ ```toml
22
+ skir-client = "0.1"
23
+ ```
24
+
25
+ In your `src/lib.rs` (or `src/main.rs`), expose the generated module:
26
+
27
+ ```rust
28
+ pub mod skirout;
29
+ ```
30
+
31
+ Then create `src/skirout.rs` with the following content (the generator will populate the `base` subdirectory):
32
+
33
+ ```rust
34
+ // The skirout module is generated by `npx skir gen`. Do not edit by hand.
35
+ pub mod base;
36
+ ```
37
+
38
+ For more information, see this Rust project [example](https://github.com/gepheum/skir-rust-example).
39
+
40
+ ## Rust generated code guide
41
+
42
+ The examples below are for the code generated from [this](https://github.com/gepheum/skir-rust-example/blob/main/skir-src/user.skir) .skir file.
43
+
44
+ ### Referring to generated symbols
45
+
46
+ ```rust
47
+ // Import generated types from the Rust module generated from "user.skir".
48
+ use crate::skirout::base::user::{
49
+ tarzan_const, SubscriptionStatus, SubscriptionStatus_Trial, User, UserRegistry, User_Pet,
50
+ };
51
+
52
+ // Now you can use: User, SubscriptionStatus, tarzan_const(), etc.
53
+ ```
54
+
55
+ ### Struct types
56
+
57
+ Skir generates a plain Rust struct for every struct in the .skir file. All
58
+ fields are public. Every struct implements `Default`, `Clone`, `PartialEq`,
59
+ and `Debug`.
60
+
61
+ ```rust
62
+ // Construct a User by filling in each field directly.
63
+ let john = User {
64
+ user_id: 42,
65
+ name: "John Doe".to_string(),
66
+ quote: "Coffee is just a socially acceptable form of rage.".to_string(),
67
+ pets: vec![User_Pet {
68
+ name: "Dumbo".to_string(),
69
+ height_in_meters: 1.0,
70
+ picture: "🐘".to_string(),
71
+ _unrecognized: None,
72
+ }],
73
+ subscription_status: SubscriptionStatus::Free,
74
+ _unrecognized: None, // Present in every struct; always set to None
75
+ };
76
+
77
+ println!("{}", john.name); // John Doe
78
+
79
+ // User::default() returns a User with every field set to its default value.
80
+ println!("{}", User::default().name); // (empty string)
81
+ println!("{}", User::default().user_id); // 0
82
+
83
+ // Struct update syntax: specify some fields and use defaults for the rest.
84
+ let jane = User {
85
+ user_id: 43,
86
+ name: "Jane Doe".to_string(),
87
+ ..User::default()
88
+ };
89
+
90
+ println!("{}", jane.quote); // (empty string)
91
+ println!("{}", jane.pets.len()); // 0
92
+ ```
93
+
94
+ #### Creating modified copies
95
+
96
+ ```rust
97
+ // Option 1: clone, then mutate.
98
+ let mut evil_john = john.clone();
99
+ evil_john.name = "Evil John".to_string();
100
+ evil_john.quote = "I solemnly swear I am up to no good.".to_string();
101
+
102
+ println!("{}", evil_john.name); // Evil John
103
+ println!("{}", evil_john.user_id); // 42 (copied from john)
104
+ println!("{}", john.name); // John Doe (john is unchanged)
105
+
106
+ // Option 2: use struct update syntax to copy fields from an existing instance.
107
+ let evil_john_2 = User {
108
+ name: "Evil John".to_string(),
109
+ quote: "I solemnly swear I am up to no good.".to_string(),
110
+ ..john.clone()
111
+ };
112
+
113
+ println!("{}", evil_john_2.name); // Evil John
114
+ println!("{}", evil_john_2.user_id); // 42 (copied from john)
115
+ println!("{}", john.name); // John Doe (john is unchanged)
116
+ ```
117
+
118
+ ### Enum types
119
+
120
+ Skir generates a Rust enum for every enum in the .skir file. The `Unknown`
121
+ variant is added automatically and is the default.
122
+
123
+ The definition of the `SubscriptionStatus` enum in the .skir file is:
124
+ ```rust
125
+ enum SubscriptionStatus {
126
+ FREE;
127
+ trial: Trial;
128
+ PREMIUM;
129
+ }
130
+ ```
131
+
132
+ #### Making enum values
133
+
134
+ ```rust
135
+ let _ = [
136
+ // Unknown is the default and is present in all Skir enums.
137
+ SubscriptionStatus::Unknown(None),
138
+ SubscriptionStatus::default(), // Same as ::Unknown(None)
139
+ SubscriptionStatus::Free,
140
+ SubscriptionStatus::Premium,
141
+ // Wrapper variants carry a value inside a Box.
142
+ SubscriptionStatus::Trial(Box::new(SubscriptionStatus_Trial {
143
+ start_time: std::time::SystemTime::now(),
144
+ _unrecognized: None,
145
+ })),
146
+ ];
147
+ ```
148
+
149
+ #### Conditions on enums
150
+
151
+ ```rust
152
+ // Direct match on enum variants:
153
+ let get_info_text = |status: &SubscriptionStatus| -> String {
154
+ match status {
155
+ SubscriptionStatus::Free => "Free user".to_string(),
156
+ SubscriptionStatus::Premium => "Premium user".to_string(),
157
+ SubscriptionStatus::Trial(t) => {
158
+ format!("On trial since {:?}", t.start_time)
159
+ }
160
+ SubscriptionStatus::Unknown(_) => "Unknown subscription status".to_string(),
161
+ }
162
+ };
163
+
164
+ println!("{}", get_info_text(&john.subscription_status)); // Free user
165
+ ```
166
+
167
+ ### Serialization
168
+
169
+ `User::serializer()` returns a `Serializer<User>` which can serialise and
170
+ deserialise instances of `User`.
171
+
172
+ ```rust
173
+ use skir_client::{JsonFlavor, Serializer, UnrecognizedValues};
174
+
175
+ let serializer = User::serializer();
176
+
177
+ // Serialize to dense JSON (field-number-based; the default mode).
178
+ // Use this when you plan to deserialize the value later. Because field
179
+ // names are not included, renaming a field remains backward-compatible.
180
+ let john_dense_json = serializer.to_json(&john, JsonFlavor::Dense);
181
+ println!("{}", john_dense_json);
182
+ // [42,"John Doe",...]
183
+
184
+ // Serialize to readable (name-based, indented) JSON.
185
+ // Use this mainly for debugging.
186
+ println!("{}", serializer.to_json(&john, JsonFlavor::Readable));
187
+ // {
188
+ // "user_id": 42,
189
+ // "name": "John Doe",
190
+ // "quote": "Coffee is just a socially acceptable form of rage.",
191
+ // "pets": [
192
+ // {
193
+ // "name": "Dumbo",
194
+ // "height_in_meters": 1.0,
195
+ // "picture": "🐘"
196
+ // }
197
+ // ],
198
+ // "subscription_status": "FREE"
199
+ // }
200
+
201
+ // The dense JSON flavor is the flavor you should pick if you intend to
202
+ // deserialize the value in the future. Skir allows fields to be renamed, and
203
+ // because fields names are not part of the dense JSON, renaming a field does
204
+ // not prevent you from deserializing the value.
205
+ // You should pick the readable flavor mostly for debugging purposes.
206
+
207
+ // Deserialize from JSON (both dense and readable formats are accepted).
208
+ let reserialized_john = serializer
209
+ .from_json(&john_dense_json, UnrecognizedValues::Drop)
210
+ .unwrap();
211
+ assert_eq!(reserialized_john, john);
212
+
213
+ // Serialize to binary format (more compact than JSON; useful when
214
+ // performance matters, though the difference is rarely significant).
215
+ let john_bytes = serializer.to_bytes(&john);
216
+ let from_bytes = serializer
217
+ .from_bytes(&john_bytes, UnrecognizedValues::Drop)
218
+ .unwrap();
219
+ assert_eq!(from_bytes, john);
220
+ ```
221
+
222
+ ### Primitive serializers
223
+
224
+ ```rust
225
+ println!("{}", Serializer::bool().to_json(&true, JsonFlavor::Dense));
226
+ // 1
227
+ println!("{}", Serializer::int32().to_json(&3_i32, JsonFlavor::Dense));
228
+ // 3
229
+ println!(
230
+ "{}",
231
+ Serializer::int64().to_json(&9_223_372_036_854_775_807_i64, JsonFlavor::Dense)
232
+ );
233
+ // "9223372036854775807"
234
+ println!("{}", Serializer::float32().to_json(&1.5_f32, JsonFlavor::Dense));
235
+ // 1.5
236
+ println!("{}", Serializer::float64().to_json(&1.5_f64, JsonFlavor::Dense));
237
+ // 1.5
238
+ println!(
239
+ "{}",
240
+ Serializer::string().to_json(&"Foo".to_string(), JsonFlavor::Dense)
241
+ );
242
+ // "Foo"
243
+ ```
244
+
245
+ ### Composite serializers
246
+
247
+ ```rust
248
+ // Optional serializer:
249
+ println!(
250
+ "{}",
251
+ Serializer::optional(Serializer::string())
252
+ .to_json(&Some("foo".to_string()), JsonFlavor::Dense)
253
+ );
254
+ // "foo"
255
+
256
+ println!(
257
+ "{}",
258
+ Serializer::optional(Serializer::string()).to_json(&None::<String>, JsonFlavor::Dense)
259
+ );
260
+ // null
261
+
262
+ // Array serializer:
263
+ println!(
264
+ "{}",
265
+ Serializer::array(Serializer::bool()).to_json(&vec![true, false], JsonFlavor::Dense)
266
+ );
267
+ // [1,0]
268
+ ```
269
+
270
+ ### Constants
271
+
272
+ ```rust
273
+ // Constants declared with 'const' in the .skir file are available as
274
+ // functions in the generated Rust code.
275
+ println!(
276
+ "{}",
277
+ User::serializer().to_json(tarzan_const(), JsonFlavor::Readable)
278
+ );
279
+ // {
280
+ // "user_id": 123,
281
+ // "name": "Tarzan",
282
+ // "quote": "AAAAaAaAaAyAAAAaAaAaAyAAAAaAaAaA",
283
+ // "pets": [
284
+ // {
285
+ // "name": "Cheeta",
286
+ // "height_in_meters": 1.67,
287
+ // "picture": "🐒"
288
+ // }
289
+ // ],
290
+ // "subscription_status": {
291
+ // "kind": "trial",
292
+ // "value": {
293
+ // "start_time": {
294
+ // "unix_millis": 1743592409000,
295
+ // "formatted": "2025-04-02T11:13:29.000Z"
296
+ // }
297
+ // }
298
+ // }
299
+ // }
300
+ ```
301
+
302
+ ### Keyed lists
303
+
304
+ ```rust
305
+ // In the .skir file:
306
+ // struct UserRegistry {
307
+ // users: [User|user_id];
308
+ // }
309
+ // The '|user_id' part tells Skir to generate a keyed array with O(1)
310
+ // lookup by user_id.
311
+
312
+ let user_registry = UserRegistry {
313
+ users: vec![john.clone(), jane.clone(), evil_john.clone()].into(),
314
+ _unrecognized: None,
315
+ };
316
+
317
+ // find_by_key returns the first element whose user_id matches.
318
+ // The first call is O(n) to build the index; subsequent calls are O(1).
319
+ let found = user_registry.users.find_by_key(43);
320
+ println!("{}", found.is_some()); // true
321
+ println!("{}", found.unwrap() == &jane); // true
322
+
323
+ // If multiple elements share the same key, the first one wins.
324
+ let found2 = user_registry.users.find_by_key(42);
325
+ println!("{}", found2.unwrap() == &john); // true
326
+
327
+ let not_found = user_registry.users.find_by_key(999_i32);
328
+ println!("{}", not_found.is_none()); // true
329
+
330
+ // find_by_key_or_default() returns a reference to the default (zero) value
331
+ // when the key is not present, instead of returning None.
332
+ let not_found_or_default = user_registry.users.find_by_key_or_default(999_i32);
333
+ println!("{}", not_found_or_default.pets.len()); // 0
334
+ ```
335
+
336
+ ### Skir services
337
+
338
+ #### Starting a Skir service on an HTTP server
339
+
340
+ Full example [here](https://github.com/gepheum/skir-rust-example/blob/main/src/bin/start_service.rs).
341
+
342
+ #### Sending RPCs to a Skir service
343
+
344
+ Full example [here](https://github.com/gepheum/skir-rust-example/blob/main/src/bin/call_service.rs).
345
+
346
+ ### Reflection
347
+
348
+ Reflection allows you to inspect a Skir type at runtime.
349
+
350
+ ```rust
351
+ use skir_client::TypeDescriptor;
352
+
353
+ let td = User::serializer().type_descriptor();
354
+ if let TypeDescriptor::Struct(sd) = td {
355
+ let names: Vec<&str> = sd.fields().iter().map(|f| f.name()).collect();
356
+ println!("{:?}", names);
357
+ // ["user_id", "name", "quote", "pets", "subscription_status"]
358
+ }
359
+
360
+ // A TypeDescriptor can be serialized to JSON and deserialized later.
361
+ let td2 = TypeDescriptor::parse_from_json(
362
+ &User::serializer().type_descriptor().as_json(),
363
+ )
364
+ .unwrap();
365
+ if let TypeDescriptor::Struct(sd2) = td2 {
366
+ println!("{}", sd2.fields().len()); // 5
367
+ }
368
+ ```
package/dist/index.js CHANGED
@@ -47,7 +47,7 @@ class RustSourceFileGenerator {
47
47
  // Home: https://github.com/gepheum/skir-rust-gen
48
48
  //
49
49
  // To install the Skir client library, run:
50
- // cargo add skir-rust-client
50
+ // cargo add skir-client
51
51
  `);
52
52
  for (const childModuleName of this.moduleSpec.childModuleNames) {
53
53
  this.push(`pub mod ${childModuleName};\n`);
@@ -87,7 +87,9 @@ class RustSourceFileGenerator {
87
87
  const { namer, typeSpeller } = this;
88
88
  this.pushSeparator("struct ".concat(struct.recordAncestors.map((r) => r.name.text).join(".")));
89
89
  const typeName = getTypeName(struct);
90
- const allFieldsUseRustDefault = struct.record.fields.every((f) => f.isRecursive === "hard" || skirDefaultIsRustDefault(f.type));
90
+ const allFieldsUseRustDefault = struct.record.fields.every((f) => f.isRecursive === "hard" ||
91
+ f.isRecursive === "via-optional" ||
92
+ skirDefaultIsRustDefault(f.type));
91
93
  const deriveList = allFieldsUseRustDefault
92
94
  ? `${namer.clone}, ${namer.debug}, ${namer.partialEq}, ${namer.default}`
93
95
  : `${namer.clone}, ${namer.debug}, ${namer.partialEq}`;
@@ -95,20 +97,19 @@ class RustSourceFileGenerator {
95
97
  this.push(`#[derive(${deriveList})]\n`);
96
98
  this.push(`pub struct ${typeName} {\n`);
97
99
  for (const field of struct.record.fields) {
98
- const fieldType = typeSpeller.getRustType(field.type);
100
+ const fieldType = typeSpeller.getRustType(field.type, field.isRecursive);
99
101
  const fieldName = toRustFieldName(field.name.text);
100
102
  if (field.isRecursive === "hard") {
101
103
  const recFieldName = `_${field.name.text}_rec`;
102
- const boxedType = `${namer.option}<${namer.box}<${fieldType}>>`;
103
104
  this.push(commentify([
104
105
  docToCommentText(field.doc),
105
- "Recursive field. Noxed and optional to avoid infinite size.",
106
- "None is equivalent to the default value.",
106
+ "Recursive field. Boxed and optional to avoid infinite size.",
107
+ "None should be treated the same as the default struct value.",
107
108
  `Use \`${fieldName}()\` to read this field without having to handle the Option,`,
108
109
  "but be careful not to call it from a recursive function as it may cause",
109
110
  "infinite recursion.",
110
111
  ]));
111
- this.push(`pub ${recFieldName}: ${boxedType},\n`);
112
+ this.push(`pub ${recFieldName}: ${fieldType},\n`);
112
113
  }
113
114
  else {
114
115
  this.push(commentify(docToCommentText(field.doc)));
@@ -313,10 +314,7 @@ class RustSourceFileGenerator {
313
314
  }
314
315
  for (const field of record.record.fields) {
315
316
  const fieldName = toRustFieldName(field.name.text);
316
- let serializerExpr = typeSpeller.getSerializerExpression(field.type, "init");
317
- if (field.isRecursive === "hard") {
318
- serializerExpr = `crate::skir_client::internal::recursive_serializer(${serializerExpr})`;
319
- }
317
+ const serializerExpr = typeSpeller.getSerializerExpression(field.type, "init", field.isRecursive);
320
318
  const getter = field.isRecursive === "hard"
321
319
  ? `|x: &${typeName}| &x._${field.name.text}_rec`
322
320
  : `|x: &${typeName}| &x.${fieldName}`;
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -7,10 +7,10 @@ export declare class TypeSpeller {
7
7
  readonly recordMap: ReadonlyMap<RecordKey, RecordLocation>;
8
8
  readonly namer: Namer;
9
9
  constructor(recordMap: ReadonlyMap<RecordKey, RecordLocation>, namer: Namer);
10
- getRustType(type: ResolvedType): string;
10
+ getRustType(type: ResolvedType, fieldRecursivity?: false | "soft" | "via-optional" | "hard"): string;
11
11
  getDefaultExpr(type: ResolvedType): string;
12
12
  getTypeName(recordKey: RecordKey): string;
13
- getSerializerExpression(type: ResolvedType, context: "init" | null): string;
13
+ getSerializerExpression(type: ResolvedType, context: "init" | null, fieldRecursivity?: false | "soft" | "via-optional" | "hard"): string;
14
14
  }
15
15
  export declare function skirDefaultIsRustDefault(type: ResolvedType): boolean;
16
16
  //# sourceMappingURL=type_speller.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"type_speller.d.ts","sourceRoot":"","sources":["../src/type_speller.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAK7E,OAAO,EAAe,KAAK,EAAoB,MAAM,aAAa,CAAC;AAEnE;;GAEG;AACH,qBAAa,WAAW;IAEpB,QAAQ,CAAC,SAAS,EAAE,WAAW,CAAC,SAAS,EAAE,cAAc,CAAC;IAC1D,QAAQ,CAAC,KAAK,EAAE,KAAK;gBADZ,SAAS,EAAE,WAAW,CAAC,SAAS,EAAE,cAAc,CAAC,EACjD,KAAK,EAAE,KAAK;IAGvB,WAAW,CAAC,IAAI,EAAE,YAAY,GAAG,MAAM;IAmDvC,cAAc,CAAC,IAAI,EAAE,YAAY,GAAG,MAAM;IA0C1C,WAAW,CAAC,SAAS,EAAE,SAAS,GAAG,MAAM;IAKzC,uBAAuB,CAAC,IAAI,EAAE,YAAY,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI,GAAG,MAAM;CA6D5E;AAED,wBAAgB,wBAAwB,CAAC,IAAI,EAAE,YAAY,GAAG,OAAO,CAiBpE"}
1
+ {"version":3,"file":"type_speller.d.ts","sourceRoot":"","sources":["../src/type_speller.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAK7E,OAAO,EAAe,KAAK,EAAoB,MAAM,aAAa,CAAC;AAEnE;;GAEG;AACH,qBAAa,WAAW;IAEpB,QAAQ,CAAC,SAAS,EAAE,WAAW,CAAC,SAAS,EAAE,cAAc,CAAC;IAC1D,QAAQ,CAAC,KAAK,EAAE,KAAK;gBADZ,SAAS,EAAE,WAAW,CAAC,SAAS,EAAE,cAAc,CAAC,EACjD,KAAK,EAAE,KAAK;IAGvB,WAAW,CACT,IAAI,EAAE,YAAY,EAClB,gBAAgB,CAAC,EAAE,KAAK,GAAG,MAAM,GAAG,cAAc,GAAG,MAAM,GAC1D,MAAM;IA0DT,cAAc,CAAC,IAAI,EAAE,YAAY,GAAG,MAAM;IA0C1C,WAAW,CAAC,SAAS,EAAE,SAAS,GAAG,MAAM;IAKzC,uBAAuB,CACrB,IAAI,EAAE,YAAY,EAClB,OAAO,EAAE,MAAM,GAAG,IAAI,EACtB,gBAAgB,CAAC,EAAE,KAAK,GAAG,MAAM,GAAG,cAAc,GAAG,MAAM,GAC1D,MAAM;CAqEV;AAED,wBAAgB,wBAAwB,CAAC,IAAI,EAAE,YAAY,GAAG,OAAO,CAiBpE"}
@@ -8,18 +8,22 @@ export class TypeSpeller {
8
8
  this.recordMap = recordMap;
9
9
  this.namer = namer;
10
10
  }
11
- getRustType(type) {
11
+ getRustType(type, fieldRecursivity) {
12
12
  switch (type.kind) {
13
13
  case "record": {
14
14
  const recordLocation = this.recordMap.get(type.key);
15
15
  const className = getTypeName(recordLocation);
16
+ let recordType;
16
17
  if (recordLocation.modulePath === this.namer.skirModule?.path) {
17
- return className;
18
+ recordType = className;
18
19
  }
19
20
  else {
20
21
  const rustPathPrefix = toRustPathPrefix(recordLocation.modulePath);
21
- return `${rustPathPrefix}::${className}`;
22
+ recordType = `${rustPathPrefix}::${className}`;
22
23
  }
24
+ return fieldRecursivity === "hard"
25
+ ? `${this.namer.option}<${this.namer.box}<${recordType}>>`
26
+ : recordType;
23
27
  }
24
28
  case "array": {
25
29
  const itemType = this.getRustType(type.item);
@@ -32,7 +36,10 @@ export class TypeSpeller {
32
36
  }
33
37
  }
34
38
  case "optional": {
35
- const otherType = this.getRustType(type.other);
39
+ let otherType = this.getRustType(type.other);
40
+ if (fieldRecursivity === "via-optional") {
41
+ otherType = `${this.namer.box}<${otherType}>`;
42
+ }
36
43
  return `${this.namer.option}<${otherType}>`;
37
44
  }
38
45
  case "primitive": {
@@ -106,7 +113,7 @@ export class TypeSpeller {
106
113
  const record = this.recordMap.get(recordKey);
107
114
  return getTypeName(record);
108
115
  }
109
- getSerializerExpression(type, context) {
116
+ getSerializerExpression(type, context, fieldRecursivity) {
110
117
  switch (type.kind) {
111
118
  case "primitive": {
112
119
  switch (type.primitive) {
@@ -145,21 +152,30 @@ export class TypeSpeller {
145
152
  }
146
153
  case "optional": {
147
154
  const otherSerializer = this.getSerializerExpression(type.other, context);
148
- return `crate::skir_client::Serializer::optional(${otherSerializer})`;
155
+ if (fieldRecursivity === "via-optional") {
156
+ return `crate::skir_client::internal::option_box_serializer(${otherSerializer})`;
157
+ }
158
+ else {
159
+ return `crate::skir_client::Serializer::optional(${otherSerializer})`;
160
+ }
149
161
  }
150
162
  case "record": {
151
163
  const recordLocation = this.recordMap.get(type.key);
152
164
  const rustType = this.getRustType(type);
165
+ let serializerExpr;
153
166
  if (context === "init" &&
154
167
  recordLocation.modulePath === this.namer.skirModule?.path) {
155
168
  const fnName = recordLocation.record.recordType === "struct"
156
169
  ? "struct_serializer_from_static"
157
170
  : "enum_serializer_from_static";
158
- return `crate::skir_client::internal::${fnName}(${rustType}::_adapter())`;
171
+ serializerExpr = `crate::skir_client::internal::${fnName}(${rustType}::_adapter())`;
159
172
  }
160
173
  else {
161
- return rustType.concat("::serializer()");
174
+ serializerExpr = rustType.concat("::serializer()");
162
175
  }
176
+ return fieldRecursivity === "hard"
177
+ ? `crate::skir_client::internal::recursive_serializer(${serializerExpr})`
178
+ : serializerExpr;
163
179
  }
164
180
  }
165
181
  }
@@ -1 +1 @@
1
- {"version":3,"file":"type_speller.js","sourceRoot":"","sources":["../src/type_speller.ts"],"names":[],"mappings":"AACA,OAAO,EACL,oBAAoB,EACpB,kBAAkB,GACnB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,WAAW,EAAS,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAEnE;;GAEG;AACH,MAAM,OAAO,WAAW;IACtB,YACW,SAAiD,EACjD,KAAY;QADZ,cAAS,GAAT,SAAS,CAAwC;QACjD,UAAK,GAAL,KAAK,CAAO;IACpB,CAAC;IAEJ,WAAW,CAAC,IAAkB;QAC5B,QAAQ,IAAI,CAAC,IAAI,EAAE,CAAC;YAClB,KAAK,QAAQ,CAAC,CAAC,CAAC;gBACd,MAAM,cAAc,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAE,CAAC;gBACrD,MAAM,SAAS,GAAG,WAAW,CAAC,cAAc,CAAC,CAAC;gBAC9C,IAAI,cAAc,CAAC,UAAU,KAAK,IAAI,CAAC,KAAK,CAAC,UAAU,EAAE,IAAI,EAAE,CAAC;oBAC9D,OAAO,SAAS,CAAC;gBACnB,CAAC;qBAAM,CAAC;oBACN,MAAM,cAAc,GAAG,gBAAgB,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC;oBACnE,OAAO,GAAG,cAAc,KAAK,SAAS,EAAE,CAAC;gBAC3C,CAAC;YACH,CAAC;YACD,KAAK,OAAO,CAAC,CAAC,CAAC;gBACb,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBAC7C,IAAI,IAAI,CAAC,GAAG,IAAI,kBAAkB,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC;oBACrD,MAAM,MAAM,GAAG,oBAAoB,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;oBAC9C,OAAO,gCAAgC,QAAQ,GAAG,MAAM,GAAG,CAAC;gBAC9D,CAAC;qBAAM,CAAC;oBACN,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,IAAI,QAAQ,GAAG,CAAC;gBAC1C,CAAC;YACH,CAAC;YACD,KAAK,UAAU,CAAC,CAAC,CAAC;gBAChB,MAAM,SAAS,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;gBAC/C,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,IAAI,SAAS,GAAG,CAAC;YAC9C,CAAC;YACD,KAAK,WAAW,CAAC,CAAC,CAAC;gBACjB,MAAM,EAAE,SAAS,EAAE,GAAG,IAAI,CAAC;gBAC3B,QAAQ,SAAS,EAAE,CAAC;oBAClB,KAAK,MAAM;wBACT,OAAO,MAAM,CAAC;oBAChB,KAAK,OAAO;wBACV,OAAO,KAAK,CAAC;oBACf,KAAK,OAAO;wBACV,OAAO,KAAK,CAAC;oBACf,KAAK,SAAS;wBACZ,OAAO,KAAK,CAAC;oBACf,KAAK,SAAS;wBACZ,OAAO,KAAK,CAAC;oBACf,KAAK,QAAQ;wBACX,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC;oBAC3B,KAAK,QAAQ;wBACX,OAAO,KAAK,CAAC;oBACf,KAAK,WAAW;wBACd,OAAO,uBAAuB,CAAC;oBACjC,KAAK,OAAO;wBACV,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;gBACzC,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;IAED,cAAc,CAAC,IAAkB;QAC/B,QAAQ,IAAI,CAAC,IAAI,EAAE,CAAC;YAClB,KAAK,QAAQ,CAAC,CAAC,CAAC;gBACd,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;gBACxC,OAAO,GAAG,QAAQ,aAAa,CAAC;YAClC,CAAC;YACD,KAAK,OAAO,CAAC,CAAC,CAAC;gBACb,IAAI,IAAI,CAAC,GAAG,IAAI,kBAAkB,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC;oBACrD,OAAO,yCAAyC,CAAC;gBACnD,CAAC;qBAAM,CAAC;oBACN,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC;gBAC9C,CAAC;YACH,CAAC;YACD,KAAK,UAAU,CAAC,CAAC,CAAC;gBAChB,OAAO,MAAM,CAAC;YAChB,CAAC;YACD,KAAK,WAAW,CAAC,CAAC,CAAC;gBACjB,MAAM,EAAE,SAAS,EAAE,GAAG,IAAI,CAAC;gBAC3B,QAAQ,SAAS,EAAE,CAAC;oBAClB,KAAK,MAAM;wBACT,OAAO,OAAO,CAAC;oBACjB,KAAK,OAAO;wBACV,OAAO,OAAO,CAAC;oBACjB,KAAK,OAAO;wBACV,OAAO,OAAO,CAAC;oBACjB,KAAK,SAAS;wBACZ,OAAO,SAAS,CAAC;oBACnB,KAAK,SAAS;wBACZ,OAAO,SAAS,CAAC;oBACnB,KAAK,QAAQ;wBACX,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;oBAC7C,KAAK,QAAQ;wBACX,OAAO,OAAO,CAAC;oBACjB,KAAK,WAAW;wBACd,OAAO,qCAAqC,CAAC;oBAC/C,KAAK,OAAO;wBACV,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC;gBAChD,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;IAED,WAAW,CAAC,SAAoB;QAC9B,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,SAAS,CAAE,CAAC;QAC9C,OAAO,WAAW,CAAC,MAAM,CAAC,CAAC;IAC7B,CAAC;IAED,uBAAuB,CAAC,IAAkB,EAAE,OAAsB;QAChE,QAAQ,IAAI,CAAC,IAAI,EAAE,CAAC;YAClB,KAAK,WAAW,CAAC,CAAC,CAAC;gBACjB,QAAQ,IAAI,CAAC,SAAS,EAAE,CAAC;oBACvB,KAAK,MAAM;wBACT,OAAO,wCAAwC,CAAC;oBAClD,KAAK,OAAO;wBACV,OAAO,yCAAyC,CAAC;oBACnD,KAAK,OAAO;wBACV,OAAO,yCAAyC,CAAC;oBACnD,KAAK,QAAQ;wBACX,OAAO,0CAA0C,CAAC;oBACpD,KAAK,SAAS;wBACZ,OAAO,2CAA2C,CAAC;oBACrD,KAAK,SAAS;wBACZ,OAAO,2CAA2C,CAAC;oBACrD,KAAK,WAAW;wBACd,OAAO,6CAA6C,CAAC;oBACvD,KAAK,QAAQ;wBACX,OAAO,0CAA0C,CAAC;oBACpD,KAAK,OAAO;wBACV,OAAO,yCAAyC,CAAC;gBACrD,CAAC;gBACD,MAAM,CAAC,GAAU,IAAI,CAAC,SAAS,CAAC;gBAChC,MAAM,SAAS,EAAE,CAAC;YACpB,CAAC;YACD,KAAK,OAAO,CAAC,CAAC,CAAC;gBACb,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBAC7C,MAAM,cAAc,GAAG,IAAI,CAAC,uBAAuB,CAAC,IAAI,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;gBACxE,IAAI,IAAI,CAAC,GAAG,IAAI,kBAAkB,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC;oBACrD,MAAM,MAAM,GAAG,oBAAoB,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;oBAC9C,OAAO,iEAAiE,QAAQ,GAAG,MAAM,mBAAmB,cAAc,GAAG,CAAC;gBAChI,CAAC;qBAAM,CAAC;oBACN,OAAO,yCAAyC,cAAc,GAAG,CAAC;gBACpE,CAAC;YACH,CAAC;YACD,KAAK,UAAU,CAAC,CAAC,CAAC;gBAChB,MAAM,eAAe,GAAG,IAAI,CAAC,uBAAuB,CAClD,IAAI,CAAC,KAAK,EACV,OAAO,CACR,CAAC;gBACF,OAAO,4CAA4C,eAAe,GAAG,CAAC;YACxE,CAAC;YACD,KAAK,QAAQ,CAAC,CAAC,CAAC;gBACd,MAAM,cAAc,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAE,CAAC;gBACrD,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;gBACxC,IACE,OAAO,KAAK,MAAM;oBAClB,cAAc,CAAC,UAAU,KAAK,IAAI,CAAC,KAAK,CAAC,UAAU,EAAE,IAAI,EACzD,CAAC;oBACD,MAAM,MAAM,GACV,cAAc,CAAC,MAAM,CAAC,UAAU,KAAK,QAAQ;wBAC3C,CAAC,CAAC,+BAA+B;wBACjC,CAAC,CAAC,6BAA6B,CAAC;oBACpC,OAAO,iCAAiC,MAAM,IAAI,QAAQ,eAAe,CAAC;gBAC5E,CAAC;qBAAM,CAAC;oBACN,OAAO,QAAQ,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAC;gBAC3C,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;CACF;AAED,MAAM,UAAU,wBAAwB,CAAC,IAAkB;IACzD,QAAQ,IAAI,CAAC,IAAI,EAAE,CAAC;QAClB,KAAK,QAAQ,CAAC;QACd,KAAK,OAAO;YACV,OAAO,IAAI,CAAC;QACd,KAAK,UAAU;YACb,OAAO,wBAAwB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC9C,KAAK,WAAW,CAAC,CAAC,CAAC;YACjB,MAAM,EAAE,SAAS,EAAE,GAAG,IAAI,CAAC;YAC3B,QAAQ,SAAS,EAAE,CAAC;gBAClB,KAAK,WAAW;oBACd,OAAO,KAAK,CAAC;gBACf;oBACE,OAAO,IAAI,CAAC;YAChB,CAAC;QACH,CAAC;IACH,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"type_speller.js","sourceRoot":"","sources":["../src/type_speller.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "skir-rust-gen",
3
- "version": "0.1.0",
3
+ "version": "0.1.2",
4
4
  "description": "",
5
5
  "keywords": [],
6
6
  "repository": {
@@ -33,7 +33,7 @@
33
33
  "lint:fix": "eslint src/**/*.ts --fix"
34
34
  },
35
35
  "dependencies": {
36
- "skir-internal": "^0.1.1",
36
+ "skir-internal": "^0.2.19",
37
37
  "zod": "^4.2.1"
38
38
  },
39
39
  "devDependencies": {
@@ -47,7 +47,7 @@
47
47
  "mocha": "^11.7.5",
48
48
  "prettier": "^3.2.4",
49
49
  "prettier-plugin-organize-imports": "^4.2.0",
50
- "skir": "^1.1.10",
50
+ "skir": "^1.1.22",
51
51
  "ts-node": "^10.9.2",
52
52
  "tsx": "^4.21.0",
53
53
  "typescript": "^5.2.2",
package/src/index.ts CHANGED
@@ -75,7 +75,7 @@ class RustSourceFileGenerator {
75
75
  // Home: https://github.com/gepheum/skir-rust-gen
76
76
  //
77
77
  // To install the Skir client library, run:
78
- // cargo add skir-rust-client
78
+ // cargo add skir-client
79
79
  `,
80
80
  );
81
81
 
@@ -129,7 +129,10 @@ class RustSourceFileGenerator {
129
129
  );
130
130
  const typeName = getTypeName(struct);
131
131
  const allFieldsUseRustDefault = struct.record.fields.every(
132
- (f) => f.isRecursive === "hard" || skirDefaultIsRustDefault(f.type!),
132
+ (f) =>
133
+ f.isRecursive === "hard" ||
134
+ f.isRecursive === "via-optional" ||
135
+ skirDefaultIsRustDefault(f.type!),
133
136
  );
134
137
  const deriveList = allFieldsUseRustDefault
135
138
  ? `${namer.clone}, ${namer.debug}, ${namer.partialEq}, ${namer.default}`
@@ -138,22 +141,21 @@ class RustSourceFileGenerator {
138
141
  this.push(`#[derive(${deriveList})]\n`);
139
142
  this.push(`pub struct ${typeName} {\n`);
140
143
  for (const field of struct.record.fields) {
141
- const fieldType = typeSpeller.getRustType(field.type!);
144
+ const fieldType = typeSpeller.getRustType(field.type!, field.isRecursive);
142
145
  const fieldName = toRustFieldName(field.name.text);
143
146
  if (field.isRecursive === "hard") {
144
147
  const recFieldName = `_${field.name.text}_rec`;
145
- const boxedType = `${namer.option}<${namer.box}<${fieldType}>>`;
146
148
  this.push(
147
149
  commentify([
148
150
  docToCommentText(field.doc),
149
- "Recursive field. Noxed and optional to avoid infinite size.",
150
- "None is equivalent to the default value.",
151
+ "Recursive field. Boxed and optional to avoid infinite size.",
152
+ "None should be treated the same as the default struct value.",
151
153
  `Use \`${fieldName}()\` to read this field without having to handle the Option,`,
152
154
  "but be careful not to call it from a recursive function as it may cause",
153
155
  "infinite recursion.",
154
156
  ]),
155
157
  );
156
- this.push(`pub ${recFieldName}: ${boxedType},\n`);
158
+ this.push(`pub ${recFieldName}: ${fieldType},\n`);
157
159
  } else {
158
160
  this.push(commentify(docToCommentText(field.doc)));
159
161
  this.push(`pub ${fieldName}: ${fieldType},\n`);
@@ -420,13 +422,11 @@ class RustSourceFileGenerator {
420
422
  }
421
423
  for (const field of record.record.fields) {
422
424
  const fieldName = toRustFieldName(field.name.text);
423
- let serializerExpr = typeSpeller.getSerializerExpression(
425
+ const serializerExpr = typeSpeller.getSerializerExpression(
424
426
  field.type!,
425
427
  "init",
428
+ field.isRecursive,
426
429
  );
427
- if (field.isRecursive === "hard") {
428
- serializerExpr = `crate::skir_client::internal::recursive_serializer(${serializerExpr})`;
429
- }
430
430
  const getter =
431
431
  field.isRecursive === "hard"
432
432
  ? `|x: &${typeName}| &x._${field.name.text}_rec`
@@ -14,17 +14,24 @@ export class TypeSpeller {
14
14
  readonly namer: Namer,
15
15
  ) {}
16
16
 
17
- getRustType(type: ResolvedType): string {
17
+ getRustType(
18
+ type: ResolvedType,
19
+ fieldRecursivity?: false | "soft" | "via-optional" | "hard",
20
+ ): string {
18
21
  switch (type.kind) {
19
22
  case "record": {
20
23
  const recordLocation = this.recordMap.get(type.key)!;
21
24
  const className = getTypeName(recordLocation);
25
+ let recordType: string;
22
26
  if (recordLocation.modulePath === this.namer.skirModule?.path) {
23
- return className;
27
+ recordType = className;
24
28
  } else {
25
29
  const rustPathPrefix = toRustPathPrefix(recordLocation.modulePath);
26
- return `${rustPathPrefix}::${className}`;
30
+ recordType = `${rustPathPrefix}::${className}`;
27
31
  }
32
+ return fieldRecursivity === "hard"
33
+ ? `${this.namer.option}<${this.namer.box}<${recordType}>>`
34
+ : recordType;
28
35
  }
29
36
  case "array": {
30
37
  const itemType = this.getRustType(type.item);
@@ -36,7 +43,10 @@ export class TypeSpeller {
36
43
  }
37
44
  }
38
45
  case "optional": {
39
- const otherType = this.getRustType(type.other);
46
+ let otherType = this.getRustType(type.other);
47
+ if (fieldRecursivity === "via-optional") {
48
+ otherType = `${this.namer.box}<${otherType}>`;
49
+ }
40
50
  return `${this.namer.option}<${otherType}>`;
41
51
  }
42
52
  case "primitive": {
@@ -112,7 +122,11 @@ export class TypeSpeller {
112
122
  return getTypeName(record);
113
123
  }
114
124
 
115
- getSerializerExpression(type: ResolvedType, context: "init" | null): string {
125
+ getSerializerExpression(
126
+ type: ResolvedType,
127
+ context: "init" | null,
128
+ fieldRecursivity?: false | "soft" | "via-optional" | "hard",
129
+ ): string {
116
130
  switch (type.kind) {
117
131
  case "primitive": {
118
132
  switch (type.primitive) {
@@ -153,11 +167,16 @@ export class TypeSpeller {
153
167
  type.other,
154
168
  context,
155
169
  );
156
- return `crate::skir_client::Serializer::optional(${otherSerializer})`;
170
+ if (fieldRecursivity === "via-optional") {
171
+ return `crate::skir_client::internal::option_box_serializer(${otherSerializer})`;
172
+ } else {
173
+ return `crate::skir_client::Serializer::optional(${otherSerializer})`;
174
+ }
157
175
  }
158
176
  case "record": {
159
177
  const recordLocation = this.recordMap.get(type.key)!;
160
178
  const rustType = this.getRustType(type);
179
+ let serializerExpr: string;
161
180
  if (
162
181
  context === "init" &&
163
182
  recordLocation.modulePath === this.namer.skirModule?.path
@@ -166,10 +185,13 @@ export class TypeSpeller {
166
185
  recordLocation.record.recordType === "struct"
167
186
  ? "struct_serializer_from_static"
168
187
  : "enum_serializer_from_static";
169
- return `crate::skir_client::internal::${fnName}(${rustType}::_adapter())`;
188
+ serializerExpr = `crate::skir_client::internal::${fnName}(${rustType}::_adapter())`;
170
189
  } else {
171
- return rustType.concat("::serializer()");
190
+ serializerExpr = rustType.concat("::serializer()");
172
191
  }
192
+ return fieldRecursivity === "hard"
193
+ ? `crate::skir_client::internal::recursive_serializer(${serializerExpr})`
194
+ : serializerExpr;
173
195
  }
174
196
  }
175
197
  }