mirror of
https://github.com/google/flatbuffers.git
synced 2026-07-03 16:44:13 +00:00
[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:
@@ -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();
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user