[Rust] Ensure unions are referenced with the correct path (#6422)

* Add codegen test for namespaced unions

* [Rust] Handle cross-namespace union use

* [Rust] Test namespace handling

* [Rust] Drop trailing whitespace in codegen

* [Rust] Set flags in generate_code.bat to match .sh

* [C#] Add additional namespace test file
This commit is contained in:
William Bain
2021-01-25 12:33:47 -05:00
committed by GitHub
parent e581013e3d
commit efcbdc7698
32 changed files with 1448 additions and 57 deletions

View File

@@ -22,11 +22,18 @@ class TableInFirstNS {
namespace_a_namespace_b.TableInNestedNS get fooTable => namespace_a_namespace_b.TableInNestedNS.reader.vTableGet(_bc, _bcOffset, 4, null);
EnumInNestedNS get fooEnum => new EnumInNestedNS.fromValue(const fb.Int8Reader().vTableGet(_bc, _bcOffset, 6, 0));
namespace_a_namespace_b.StructInNestedNS get fooStruct => namespace_a_namespace_b.StructInNestedNS.reader.vTableGet(_bc, _bcOffset, 8, null);
UnionInNestedNSTypeId get fooUnionType => new UnionInNestedNSTypeId.fromValue(const fb.Uint8Reader().vTableGet(_bc, _bcOffset, 8, 0));
dynamic get fooUnion {
switch (fooUnionType?.value) {
case 1: return TableInNestedNS.reader.vTableGet(_bc, _bcOffset, 10, null);
default: return null;
}
}
namespace_a_namespace_b.StructInNestedNS get fooStruct => namespace_a_namespace_b.StructInNestedNS.reader.vTableGet(_bc, _bcOffset, 12, null);
@override
String toString() {
return 'TableInFirstNS{fooTable: $fooTable, fooEnum: $fooEnum, fooStruct: $fooStruct}';
return 'TableInFirstNS{fooTable: $fooTable, fooEnum: $fooEnum, fooUnionType: $fooUnionType, fooUnion: $fooUnion, fooStruct: $fooStruct}';
}
}
@@ -57,8 +64,16 @@ class TableInFirstNSBuilder {
fbBuilder.addInt8(1, fooEnum?.value);
return fbBuilder.offset;
}
int addFooUnionType(UnionInNestedNSTypeId fooUnionType) {
fbBuilder.addUint8(2, fooUnionType?.value);
return fbBuilder.offset;
}
int addFooUnionOffset(int offset) {
fbBuilder.addOffset(3, offset);
return fbBuilder.offset;
}
int addFooStruct(int offset) {
fbBuilder.addStruct(2, offset);
fbBuilder.addStruct(4, offset);
return fbBuilder.offset;
}
@@ -70,15 +85,21 @@ class TableInFirstNSBuilder {
class TableInFirstNSObjectBuilder extends fb.ObjectBuilder {
final namespace_a_namespace_b.TableInNestedNSObjectBuilder _fooTable;
final EnumInNestedNS _fooEnum;
final UnionInNestedNSTypeId _fooUnionType;
final dynamic _fooUnion;
final namespace_a_namespace_b.StructInNestedNSObjectBuilder _fooStruct;
TableInFirstNSObjectBuilder({
namespace_a_namespace_b.TableInNestedNSObjectBuilder fooTable,
EnumInNestedNS fooEnum,
UnionInNestedNSTypeId fooUnionType,
dynamic fooUnion,
namespace_a_namespace_b.StructInNestedNSObjectBuilder fooStruct,
})
: _fooTable = fooTable,
_fooEnum = fooEnum,
_fooUnionType = fooUnionType,
_fooUnion = fooUnion,
_fooStruct = fooStruct;
/// Finish building, and store into the [fbBuilder].
@@ -87,14 +108,19 @@ class TableInFirstNSObjectBuilder extends fb.ObjectBuilder {
fb.Builder fbBuilder) {
assert(fbBuilder != null);
final int fooTableOffset = _fooTable?.getOrCreateOffset(fbBuilder);
final int fooUnionOffset = _fooUnion?.getOrCreateOffset(fbBuilder);
fbBuilder.startTable();
if (fooTableOffset != null) {
fbBuilder.addOffset(0, fooTableOffset);
}
fbBuilder.addInt8(1, _fooEnum?.value);
fbBuilder.addUint8(2, _fooUnionType?.value);
if (fooUnionOffset != null) {
fbBuilder.addOffset(3, fooUnionOffset);
}
if (_fooStruct != null) {
fbBuilder.addStruct(2, _fooStruct.finish(fbBuilder));
fbBuilder.addStruct(4, _fooStruct.finish(fbBuilder));
}
return fbBuilder.endTable();
}