Skip to content

Commit a322d9f

Browse files
author
Michael Ward
committed
merging in PR
1 parent bab473e commit a322d9f

File tree

4 files changed

+62
-52
lines changed

4 files changed

+62
-52
lines changed

rust/tests/fixed_sized_primitive_array.rs

Lines changed: 36 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -74,7 +74,7 @@ fn test_encode_then_decode_u8_slice() {
7474
let mut buffer = [uninit; 1024];
7575
let mut encoder = create_encoder(&mut buffer);
7676

77-
encode_func(&mut encoder, each_slice);
77+
encode_func(&mut encoder, each_slice.iter().map(|x| *x));
7878

7979
let end = 1i32;
8080
end_encode_func(&mut encoder, end);
@@ -106,49 +106,49 @@ fn test_encode_then_decode_u8_slice() {
106106
}
107107

108108
run_encode_then_decode_for_array_of_u8_len_16!(
109-
DemoEncoder::fixed_16_char_at_most_16_items_from_slice,
109+
DemoEncoder::fixed_16_char_from_iter,
110110
DemoDecoder::fixed_16_char,
111111
DemoEncoder::fixed_16_char_end,
112112
DemoDecoder::fixed_16_char_end
113113
);
114114
run_encode_then_decode_for_array_of_u8_len_16!(
115-
DemoEncoder::fixed_16_ascii_char_at_most_16_items_from_slice,
115+
DemoEncoder::fixed_16_ascii_char_from_iter,
116116
DemoDecoder::fixed_16_ascii_char,
117117
DemoEncoder::fixed_16_ascii_char_end,
118118
DemoDecoder::fixed_16_ascii_char_end
119119
);
120120
run_encode_then_decode_for_array_of_u8_len_16!(
121-
DemoEncoder::fixed_16_gb_18030_char_at_most_16_items_from_slice,
121+
DemoEncoder::fixed_16_gb_18030_char_from_iter,
122122
DemoDecoder::fixed_16_gb_18030_char,
123123
DemoEncoder::fixed_16_gb_18030_char_end,
124124
DemoDecoder::fixed_16_gb_18030_char_end
125125
);
126126
run_encode_then_decode_for_array_of_u8_len_16!(
127-
DemoEncoder::fixed_16_utf_8_char_at_most_16_items_from_slice,
127+
DemoEncoder::fixed_16_utf_8_char_from_iter,
128128
DemoDecoder::fixed_16_utf_8_char,
129129
DemoEncoder::fixed_16_utf_8_char_end,
130130
DemoDecoder::fixed_16_utf_8_char_end
131131
);
132132
run_encode_then_decode_for_array_of_u8_len_16!(
133-
DemoEncoder::fixed_16_u8_at_most_16_items_from_slice,
133+
DemoEncoder::fixed_16_u8_from_iter,
134134
DemoDecoder::fixed_16_u8,
135135
DemoEncoder::fixed_16_u8_end,
136136
DemoDecoder::fixed_16_u8_end
137137
);
138138
run_encode_then_decode_for_array_of_u8_len_16!(
139-
DemoEncoder::fixed_16_ascii_u8_at_most_16_items_from_slice,
139+
DemoEncoder::fixed_16_ascii_u8_from_iter,
140140
DemoDecoder::fixed_16_ascii_u8,
141141
DemoEncoder::fixed_16_ascii_u8_end,
142142
DemoDecoder::fixed_16_ascii_u8_end
143143
);
144144
run_encode_then_decode_for_array_of_u8_len_16!(
145-
DemoEncoder::fixed_16_gb_18030_u8_at_most_16_items_from_slice,
145+
DemoEncoder::fixed_16_gb_18030_u8_from_iter,
146146
DemoDecoder::fixed_16_gb_18030_u8,
147147
DemoEncoder::fixed_16_gb_18030_u8_end,
148148
DemoDecoder::fixed_16_gb_18030_u8_end
149149
);
150150
run_encode_then_decode_for_array_of_u8_len_16!(
151-
DemoEncoder::fixed_16_utf_8_u8_at_most_16_items_from_slice,
151+
DemoEncoder::fixed_16_utf_8_u8_from_iter,
152152
DemoDecoder::fixed_16_utf_8_u8,
153153
DemoEncoder::fixed_16_utf_8u_8_end,
154154
DemoDecoder::fixed_16_utf_8u_8_end
@@ -295,7 +295,7 @@ fn test_encode_then_decode_non_u8_signed_primitive_slice() {
295295
let mut buffer = [uninit; 1024];
296296
let mut encoder = create_encoder(&mut buffer);
297297

298-
encode_func(&mut encoder, &each_slice);
298+
encode_func(&mut encoder, each_slice.iter().map(|x| *x));
299299

300300
let end = 1i32;
301301
end_encode_func(&mut encoder, end);
@@ -333,28 +333,28 @@ fn test_encode_then_decode_non_u8_signed_primitive_slice() {
333333
}
334334

335335
run_encode_then_decode_for_array_of_signed_len_16!(
336-
DemoEncoder::fixed_16_i8_at_most_16_items_from_slice,
336+
DemoEncoder::fixed_16_i8_from_iter,
337337
DemoDecoder::fixed_16_i8,
338338
DemoEncoder::fixed_16_i8_end,
339339
DemoDecoder::fixed_16_i8_end,
340340
i8, i8::from_le_bytes([uninit])
341341
);
342342
run_encode_then_decode_for_array_of_signed_len_16!(
343-
DemoEncoder::fixed_16_i16_at_most_16_items_from_slice,
343+
DemoEncoder::fixed_16_i16_from_iter,
344344
DemoDecoder::fixed_16_i16,
345345
DemoEncoder::fixed_16_i16_end,
346346
DemoDecoder::fixed_16_i16_end,
347347
i16, i16::from_le_bytes([uninit, uninit])
348348
);
349349
run_encode_then_decode_for_array_of_signed_len_16!(
350-
DemoEncoder::fixed_16_i32_at_most_16_items_from_slice,
350+
DemoEncoder::fixed_16_i32_from_iter,
351351
DemoDecoder::fixed_16_i32,
352352
DemoEncoder::fixed_16_i32_end,
353353
DemoDecoder::fixed_16_i32_end,
354354
i32, i32::from_le_bytes([uninit, uninit, uninit, uninit])
355355
);
356356
run_encode_then_decode_for_array_of_signed_len_16!(
357-
DemoEncoder::fixed_16_i64_at_most_16_items_from_slice,
357+
DemoEncoder::fixed_16_i64_from_iter,
358358
DemoDecoder::fixed_16_i64,
359359
DemoEncoder::fixed_16_i64_end,
360360
DemoDecoder::fixed_16_i64_end,
@@ -500,7 +500,7 @@ fn test_encode_then_decode_non_u8_unsigned_primitive_slice() {
500500
let mut buffer = [uninit; 1024];
501501
let mut encoder = create_encoder(&mut buffer);
502502

503-
encode_func(&mut encoder, each_slice);
503+
encode_func(&mut encoder, each_slice.iter().map(|x| *x));
504504

505505
let end = 1i32;
506506
end_encode_func(&mut encoder, end);
@@ -539,23 +539,23 @@ fn test_encode_then_decode_non_u8_unsigned_primitive_slice() {
539539
}
540540

541541
run_encode_then_decode_for_array_of_unsigned_len_16!(
542-
DemoEncoder::fixed_16_u16_at_most_16_items_from_slice,
542+
DemoEncoder::fixed_16_u16_from_iter,
543543
DemoDecoder::fixed_16_u16,
544544
DemoEncoder::fixed_16_u16_end,
545545
DemoDecoder::fixed_16_u16_end,
546546
u16,
547547
u16::from_le_bytes([uninit, uninit])
548548
);
549549
run_encode_then_decode_for_array_of_unsigned_len_16!(
550-
DemoEncoder::fixed_16_u32_at_most_16_items_from_slice,
550+
DemoEncoder::fixed_16_u32_from_iter,
551551
DemoDecoder::fixed_16_u32,
552552
DemoEncoder::fixed_16_u32_end,
553553
DemoDecoder::fixed_16_u32_end,
554554
u32,
555555
u32::from_le_bytes([uninit, uninit, uninit, uninit])
556556
);
557557
run_encode_then_decode_for_array_of_unsigned_len_16!(
558-
DemoEncoder::fixed_16_u64_at_most_16_items_from_slice,
558+
DemoEncoder::fixed_16_u64_from_iter,
559559
DemoDecoder::fixed_16_u64,
560560
DemoEncoder::fixed_16_u64_end,
561561
DemoDecoder::fixed_16_u64_end,
@@ -628,7 +628,7 @@ fn test_encode_then_decode_u8_slice_padded() {
628628
let mut buffer = [uninit; 1024];
629629
let mut encoder = create_encoder(&mut buffer);
630630

631-
encode_func(&mut encoder, each_slice);
631+
encode_func(&mut encoder, each_slice.iter().map(|x| *x));
632632

633633
let end = 1i32;
634634
end_encode_func(&mut encoder, end);
@@ -660,49 +660,49 @@ fn test_encode_then_decode_u8_slice_padded() {
660660
}
661661

662662
run_encode_then_decode_for_array_of_u8_len_16!(
663-
DemoEncoder::fixed_16_char_at_most_16_items_from_slice_padded_with_zero,
663+
DemoEncoder::fixed_16_char_from_iter,
664664
DemoDecoder::fixed_16_char,
665665
DemoEncoder::fixed_16_char_end,
666666
DemoDecoder::fixed_16_char_end,
667667
);
668668
run_encode_then_decode_for_array_of_u8_len_16!(
669-
DemoEncoder::fixed_16_ascii_char_at_most_16_items_from_slice_padded_with_zero,
669+
DemoEncoder::fixed_16_ascii_char_from_iter,
670670
DemoDecoder::fixed_16_ascii_char,
671671
DemoEncoder::fixed_16_ascii_char_end,
672672
DemoDecoder::fixed_16_ascii_char_end,
673673
);
674674
run_encode_then_decode_for_array_of_u8_len_16!(
675-
DemoEncoder::fixed_16_gb_18030_char_at_most_16_items_from_slice_padded_with_zero,
675+
DemoEncoder::fixed_16_gb_18030_char_from_iter,
676676
DemoDecoder::fixed_16_gb_18030_char,
677677
DemoEncoder::fixed_16_gb_18030_char_end,
678678
DemoDecoder::fixed_16_gb_18030_char_end,
679679
);
680680
run_encode_then_decode_for_array_of_u8_len_16!(
681-
DemoEncoder::fixed_16_utf_8_char_at_most_16_items_from_slice_padded_with_zero,
681+
DemoEncoder::fixed_16_utf_8_char_from_iter,
682682
DemoDecoder::fixed_16_utf_8_char,
683683
DemoEncoder::fixed_16_utf_8_char_end,
684684
DemoDecoder::fixed_16_utf_8_char_end,
685685
);
686686
run_encode_then_decode_for_array_of_u8_len_16!(
687-
DemoEncoder::fixed_16_u8_at_most_16_items_from_slice_padded_with_zero,
687+
DemoEncoder::fixed_16_u8_from_iter,
688688
DemoDecoder::fixed_16_u8,
689689
DemoEncoder::fixed_16_u8_end,
690690
DemoDecoder::fixed_16_u8_end,
691691
);
692692
run_encode_then_decode_for_array_of_u8_len_16!(
693-
DemoEncoder::fixed_16_ascii_u8_at_most_16_items_from_slice_padded_with_zero,
693+
DemoEncoder::fixed_16_ascii_u8_from_iter,
694694
DemoDecoder::fixed_16_ascii_u8,
695695
DemoEncoder::fixed_16_ascii_u8_end,
696696
DemoDecoder::fixed_16_ascii_u8_end,
697697
);
698698
run_encode_then_decode_for_array_of_u8_len_16!(
699-
DemoEncoder::fixed_16_gb_18030_u8_at_most_16_items_from_slice_padded_with_zero,
699+
DemoEncoder::fixed_16_gb_18030_u8_from_iter,
700700
DemoDecoder::fixed_16_gb_18030_u8,
701701
DemoEncoder::fixed_16_gb_18030_u8_end,
702702
DemoDecoder::fixed_16_gb_18030_u8_end,
703703
);
704704
run_encode_then_decode_for_array_of_u8_len_16!(
705-
DemoEncoder::fixed_16_utf_8_u8_at_most_16_items_from_slice_padded_with_zero,
705+
DemoEncoder::fixed_16_utf_8_u8_from_iter,
706706
DemoDecoder::fixed_16_utf_8_u8,
707707
DemoEncoder::fixed_16_utf_8u_8_end,
708708
DemoDecoder::fixed_16_utf_8u_8_end,
@@ -846,7 +846,7 @@ fn test_encode_then_decode_non_u8_signed_primitive_slice_padded() {
846846
let mut buffer = [uninit; 1024];
847847
let mut encoder = create_encoder(&mut buffer);
848848

849-
encode_func(&mut encoder, each_slice);
849+
encode_func(&mut encoder, each_slice.iter().map(|x| *x));
850850

851851
let end = 1i32;
852852
end_encode_func(&mut encoder, end);
@@ -884,28 +884,28 @@ fn test_encode_then_decode_non_u8_signed_primitive_slice_padded() {
884884
}
885885

886886
run_encode_then_decode_for_array_of_signed_len_16!(
887-
DemoEncoder::fixed_16_i8_at_most_16_items_from_slice_padded_with_zero,
887+
DemoEncoder::fixed_16_i8_from_iter,
888888
DemoDecoder::fixed_16_i8,
889889
DemoEncoder::fixed_16_i8_end,
890890
DemoDecoder::fixed_16_i8_end,
891891
i8,
892892
);
893893
run_encode_then_decode_for_array_of_signed_len_16!(
894-
DemoEncoder::fixed_16_i16_at_most_16_items_from_slice_padded_with_zero,
894+
DemoEncoder::fixed_16_i16_from_iter,
895895
DemoDecoder::fixed_16_i16,
896896
DemoEncoder::fixed_16_i16_end,
897897
DemoDecoder::fixed_16_i16_end,
898898
i16,
899899
);
900900
run_encode_then_decode_for_array_of_signed_len_16!(
901-
DemoEncoder::fixed_16_i32_at_most_16_items_from_slice_padded_with_zero,
901+
DemoEncoder::fixed_16_i32_from_iter,
902902
DemoDecoder::fixed_16_i32,
903903
DemoEncoder::fixed_16_i32_end,
904904
DemoDecoder::fixed_16_i32_end,
905905
i32,
906906
);
907907
run_encode_then_decode_for_array_of_signed_len_16!(
908-
DemoEncoder::fixed_16_i64_at_most_16_items_from_slice_padded_with_zero,
908+
DemoEncoder::fixed_16_i64_from_iter,
909909
DemoDecoder::fixed_16_i64,
910910
DemoEncoder::fixed_16_i64_end,
911911
DemoDecoder::fixed_16_i64_end,
@@ -1049,7 +1049,7 @@ fn test_encode_then_decode_non_u8_unsigned_primitive_slice_padded() {
10491049
let mut buffer = [uninit; 1024];
10501050
let mut encoder = create_encoder(&mut buffer);
10511051

1052-
encode_func(&mut encoder, each_slice);
1052+
encode_func(&mut encoder, each_slice.iter().map(|x| *x));
10531053

10541054
let end = 1i32;
10551055
end_encode_func(&mut encoder, end);
@@ -1087,21 +1087,21 @@ fn test_encode_then_decode_non_u8_unsigned_primitive_slice_padded() {
10871087
}
10881088

10891089
run_encode_then_decode_for_array_of_unsigned_len_16!(
1090-
DemoEncoder::fixed_16_u16_at_most_16_items_from_slice_padded_with_zero,
1090+
DemoEncoder::fixed_16_u16_from_iter,
10911091
DemoDecoder::fixed_16_u16,
10921092
DemoEncoder::fixed_16_u16_end,
10931093
DemoDecoder::fixed_16_u16_end,
10941094
u16
10951095
);
10961096
run_encode_then_decode_for_array_of_unsigned_len_16!(
1097-
DemoEncoder::fixed_16_u32_at_most_16_items_from_slice_padded_with_zero,
1097+
DemoEncoder::fixed_16_u32_from_iter,
10981098
DemoDecoder::fixed_16_u32,
10991099
DemoEncoder::fixed_16_u32_end,
11001100
DemoDecoder::fixed_16_u32_end,
11011101
u32
11021102
);
11031103
run_encode_then_decode_for_array_of_unsigned_len_16!(
1104-
DemoEncoder::fixed_16_u64_at_most_16_items_from_slice_padded_with_zero,
1104+
DemoEncoder::fixed_16_u64_from_iter,
11051105
DemoDecoder::fixed_16_u64,
11061106
DemoEncoder::fixed_16_u64_end,
11071107
DemoDecoder::fixed_16_u64_end,

sbe-tool/src/main/java/uk/co/real_logic/sbe/generation/rust/RustGenerator.java

Lines changed: 18 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -361,6 +361,12 @@ static void generateEncoderVarData(
361361
}
362362
}
363363

364+
private static String rustNullLiteral(final Encoding encoding)
365+
{
366+
return generateRustLiteral(encoding.primitiveType(), encoding.applicableNullValue());
367+
}
368+
369+
364370
private static void generateRustDoc(
365371
final StringBuilder sb,
366372
final int level,
@@ -369,7 +375,7 @@ private static void generateRustDoc(
369375
{
370376
indent(sb, level, "/// - min value: %s\n", encoding.applicableMinValue());
371377
indent(sb, level, "/// - max value: %s\n", encoding.applicableMaxValue());
372-
indent(sb, level, "/// - null value: %s\n", encoding.applicableNullValue());
378+
indent(sb, level, "/// - null value: %s\n", rustNullLiteral(encoding));
373379
indent(sb, level, "/// - characterEncoding: %s\n", encoding.characterEncoding());
374380
indent(sb, level, "/// - semanticType: %s\n", encoding.semanticType());
375381
indent(sb, level, "/// - encodedOffset: %d\n", typeToken.offset());
@@ -404,7 +410,7 @@ private static void generatePrimitiveArrayEncoder(
404410
indent(sb, level + 1, "let mid = %d.min(value.len());\n", arrayLength);
405411
indent(sb, level + 1, "buf.put_slice_at(offset, value.split_at(mid).0);\n");
406412
indent(sb, level + 1, "for i in mid..%d {\n", arrayLength);
407-
indent(sb, level + 2, "buf.put_u8_at(offset + (i * 1), %s_u8);\n", encoding.applicableNullValue());
413+
indent(sb, level + 2, "buf.put_u8_at(offset + (i * 1), %s);\n", rustNullLiteral(encoding));
408414
indent(sb, level + 1, "}\n");
409415
indent(sb, level, "}\n\n");
410416
}
@@ -436,8 +442,8 @@ private static void generatePrimitiveArrayEncoder(
436442

437443
indent(sb, level + 1, "let offset = self.%s;\n", getBufOffset(typeToken));
438444
indent(sb, level + 1, "let buf = self.get_buf_mut();\n");
439-
indent(sb, level + 1, "let iter = iter.chain(std::iter::repeat(%s_%s)).take(%d);\n",
440-
encoding.applicableNullValue(), rustPrimitiveType, arrayLength);
445+
indent(sb, level + 1, "let iter = iter.chain(std::iter::repeat(%s)).take(%d);\n",
446+
rustNullLiteral(encoding), arrayLength);
441447

442448
indent(sb, level + 1, "for (i, v) in iter.enumerate() {\n");
443449
indent(sb, level + 2, "buf.put_%s_at(offset + (i * %d), v);\n",
@@ -715,7 +721,7 @@ private static void generatePrimitiveArrayDecoder(
715721
if (fieldToken.version() > 0)
716722
{
717723
indent(sb, level + 1, "if self.acting_version() < %d {\n", fieldToken.version());
718-
indent(sb, level + 2, "return [%s; %d];\n", encoding.applicableNullValue(), arrayLength);
724+
indent(sb, level + 2, "return [%s; %d];\n", rustNullLiteral(encoding), arrayLength);
719725
indent(sb, level + 1, "}\n\n");
720726
}
721727

@@ -808,7 +814,7 @@ private static void generatePrimitiveOptionalDecoder(
808814
final String rustPrimitiveType = rustTypeName(primitiveType);
809815
final String characterEncoding = encoding.characterEncoding();
810816
indent(sb, level, "/// primitive field - '%s' { null_value: '%s' }\n",
811-
encoding.presence(), encoding.applicableNullValue());
817+
encoding.presence(), rustNullLiteral(encoding));
812818

813819
if (characterEncoding != null)
814820
{
@@ -825,14 +831,14 @@ private static void generatePrimitiveOptionalDecoder(
825831
rustPrimitiveType,
826832
getBufOffset(fieldToken));
827833

828-
final String literal = generateRustLiteral(primitiveType, encoding.applicableNullValue().toString());
829-
if (literal.endsWith("::NAN"))
834+
final String nullLiteral = rustNullLiteral(encoding);
835+
if (nullLiteral.endsWith("::NAN"))
830836
{
831837
indent(sb, level + 1, "if value.is_nan() {\n");
832838
}
833839
else
834840
{
835-
indent(sb, level + 1, "if value == %s {\n", literal);
841+
indent(sb, level + 1, "if value == %s {\n", nullLiteral);
836842
}
837843

838844
indent(sb, level + 2, "None\n");
@@ -869,8 +875,7 @@ private static void generatePrimitiveRequiredDecoder(
869875
if (fieldToken.version() > 0)
870876
{
871877
indent(sb, level + 1, "if self.acting_version() < %d {\n", fieldToken.version());
872-
indent(sb, level + 2, "return %s;\n",
873-
generateRustLiteral(encoding.primitiveType(), encoding.applicableNullValue().toString()));
878+
indent(sb, level + 2, "return %s;\n", rustNullLiteral(encoding));
874879
indent(sb, level + 1, "}\n\n");
875880
}
876881

@@ -1293,8 +1298,7 @@ private static void generateEnum(
12931298
// null value
12941299
{
12951300
final Encoding encoding = messageBody.get(0).encoding();
1296-
final CharSequence nullVal = generateRustLiteral(encoding.primitiveType(),
1297-
encoding.applicableNullValue().toString());
1301+
final CharSequence nullVal = rustNullLiteral(encoding);
12981302
indent(writer, 1, "#[default]\n");
12991303
indent(writer, 1, "NullVal = %s, \n", nullVal);
13001304
}
@@ -1358,8 +1362,7 @@ private static void generateFromEnumForPrimitive(
13581362

13591363
{
13601364
final Encoding encoding = messageBody.get(0).encoding();
1361-
final CharSequence nullVal = generateRustLiteral(encoding.primitiveType(),
1362-
encoding.applicableNullValue().toString());
1365+
final CharSequence nullVal = rustNullLiteral(encoding);
13631366
indent(writer, 3, "%s::NullVal => %s,\n", enumRustName, nullVal);
13641367
}
13651368
indent(writer, 2, "}\n");

0 commit comments

Comments
 (0)