Skip to content

Commit 4ccc52c

Browse files
author
mustiikhalil
authored
[swift] Implements union strings (#6589)
1 parent b82fe07 commit 4ccc52c

File tree

19 files changed

+397
-281
lines changed

19 files changed

+397
-281
lines changed

grpc/examples/swift/Greeter/Sources/Model/greeter_generated.swift

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -24,12 +24,12 @@ public struct models_HelloReply: FlatBufferObject {
2424
public var message: String? { let o = _accessor.offset(VTOFFSET.message.v); return o == 0 ? nil : _accessor.string(at: o) }
2525
public var messageSegmentArray: [UInt8]? { return _accessor.getVector(at: VTOFFSET.message.v) }
2626
public static func startHelloReply(_ fbb: inout FlatBufferBuilder) -> UOffset { fbb.startTable(with: 1) }
27-
public static func add(message: Offset<String>, _ fbb: inout FlatBufferBuilder) { fbb.add(offset: message, at: VTOFFSET.message.p) }
28-
public static func endHelloReply(_ fbb: inout FlatBufferBuilder, start: UOffset) -> Offset<UOffset> { let end = Offset<UOffset>(offset: fbb.endTable(at: start)); return end }
27+
public static func add(message: Offset, _ fbb: inout FlatBufferBuilder) { fbb.add(offset: message, at: VTOFFSET.message.p) }
28+
public static func endHelloReply(_ fbb: inout FlatBufferBuilder, start: UOffset) -> Offset { let end = Offset(offset: fbb.endTable(at: start)); return end }
2929
public static func createHelloReply(
3030
_ fbb: inout FlatBufferBuilder,
31-
messageOffset message: Offset<String> = Offset()
32-
) -> Offset<UOffset> {
31+
messageOffset message: Offset = Offset()
32+
) -> Offset {
3333
let __start = models_HelloReply.startHelloReply(&fbb)
3434
models_HelloReply.add(message: message, &fbb)
3535
return models_HelloReply.endHelloReply(&fbb, start: __start)
@@ -56,12 +56,12 @@ public struct models_HelloRequest: FlatBufferObject {
5656
public var name: String? { let o = _accessor.offset(VTOFFSET.name.v); return o == 0 ? nil : _accessor.string(at: o) }
5757
public var nameSegmentArray: [UInt8]? { return _accessor.getVector(at: VTOFFSET.name.v) }
5858
public static func startHelloRequest(_ fbb: inout FlatBufferBuilder) -> UOffset { fbb.startTable(with: 1) }
59-
public static func add(name: Offset<String>, _ fbb: inout FlatBufferBuilder) { fbb.add(offset: name, at: VTOFFSET.name.p) }
60-
public static func endHelloRequest(_ fbb: inout FlatBufferBuilder, start: UOffset) -> Offset<UOffset> { let end = Offset<UOffset>(offset: fbb.endTable(at: start)); return end }
59+
public static func add(name: Offset, _ fbb: inout FlatBufferBuilder) { fbb.add(offset: name, at: VTOFFSET.name.p) }
60+
public static func endHelloRequest(_ fbb: inout FlatBufferBuilder, start: UOffset) -> Offset { let end = Offset(offset: fbb.endTable(at: start)); return end }
6161
public static func createHelloRequest(
6262
_ fbb: inout FlatBufferBuilder,
63-
nameOffset name: Offset<String> = Offset()
64-
) -> Offset<UOffset> {
63+
nameOffset name: Offset = Offset()
64+
) -> Offset {
6565
let __start = models_HelloRequest.startHelloRequest(&fbb)
6666
models_HelloRequest.add(name: name, &fbb)
6767
return models_HelloRequest.endHelloRequest(&fbb, start: __start)

src/idl_gen_swift.cpp

Lines changed: 24 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -312,7 +312,7 @@ class SwiftGenerator : public BaseGenerator {
312312
std::string func_header = "";
313313
GenerateStructArgs(struct_def, &func_header, "", "");
314314
code_ += func_header.substr(0, func_header.size() - 2) + "\\";
315-
code_ += ") -> Offset<UOffset> {";
315+
code_ += ") -> Offset {";
316316
Indent();
317317
code_ +=
318318
"builder.createStructOf(size: {{STRUCTNAME}}.size, alignment: "
@@ -424,7 +424,7 @@ class SwiftGenerator : public BaseGenerator {
424424
code_ +=
425425
"{{ACCESS_TYPE}} static func finish(_ fbb: inout "
426426
"FlatBufferBuilder, end: "
427-
"Offset<UOffset>, prefix: Bool = false) { fbb.finish(offset: end, "
427+
"Offset, prefix: Bool = false) { fbb.finish(offset: end, "
428428
"fileId: "
429429
"\"{{FILENAME}}\", addPrefix: prefix) }";
430430
}
@@ -470,7 +470,7 @@ class SwiftGenerator : public BaseGenerator {
470470
"{{ACCESS_TYPE}} static func end{{SHORT_STRUCTNAME}}(_ fbb: inout "
471471
"FlatBufferBuilder, "
472472
"start: "
473-
"UOffset) -> Offset<UOffset> { let end = Offset<UOffset>(offset: "
473+
"UOffset) -> Offset { let end = Offset(offset: "
474474
"fbb.endTable(at: start))\\";
475475
if (require_fields.capacity() != 0) {
476476
std::string fields = "";
@@ -492,7 +492,7 @@ class SwiftGenerator : public BaseGenerator {
492492
}
493493
code_ += "";
494494
Outdent();
495-
code_ += ") -> Offset<UOffset> {";
495+
code_ += ") -> Offset {";
496496
Indent();
497497
code_ += "let __start = {{STRUCTNAME}}.start{{SHORT_STRUCTNAME}}(&fbb)";
498498
for (auto it = create_func_body.begin(); it < create_func_body.end();
@@ -514,8 +514,8 @@ class SwiftGenerator : public BaseGenerator {
514514

515515
code_ +=
516516
"{{ACCESS_TYPE}} static func "
517-
"sortVectorOf{{SHORT_VALUENAME}}(offsets:[Offset<UOffset>], "
518-
"_ fbb: inout FlatBufferBuilder) -> Offset<UOffset> {";
517+
"sortVectorOf{{SHORT_VALUENAME}}(offsets:[Offset], "
518+
"_ fbb: inout FlatBufferBuilder) -> Offset {";
519519
Indent();
520520
code_ += spacing + "var off = offsets";
521521
code_ +=
@@ -603,20 +603,18 @@ class SwiftGenerator : public BaseGenerator {
603603
return;
604604
}
605605

606-
auto offset_type =
607-
IsString(field.value.type) ? "Offset<String>" : "Offset<UOffset>";
608606
auto camel_case_name =
609607
MakeCamel(name, false) +
610608
(IsVector(field.value.type) || IsArray(field.value.type)
611609
? "VectorOffset"
612610
: "Offset");
613611
create_func_header.push_back(camel_case_name + " " + name + ": " +
614-
offset_type + " = Offset()");
612+
"Offset = Offset()");
615613
auto reader_type =
616614
IsStruct(field.value.type) && field.value.type.struct_def->fixed
617615
? "structOffset: {{TABLEOFFSET}}.{{OFFSET}}.p) }"
618616
: "offset: {{VALUENAME}}, at: {{TABLEOFFSET}}.{{OFFSET}}.p) }";
619-
code_ += offset_type + builder_string + "fbb.add(" + reader_type;
617+
code_ += "Offset" + builder_string + "fbb.add(" + reader_type;
620618

621619
auto vectortype = field.value.type.VectorType();
622620

@@ -731,7 +729,8 @@ class SwiftGenerator : public BaseGenerator {
731729
case BASE_TYPE_UNION:
732730
code_.SetValue("CONSTANT", "nil");
733731
code_ +=
734-
"{{ACCESS_TYPE}} func {{VALUENAME}}<T: FlatBufferObject>(type: "
732+
"{{ACCESS_TYPE}} func {{VALUENAME}}<T: "
733+
"FlatbuffersInitializable>(type: "
735734
"T.Type) -> T" +
736735
is_required + " { " + GenOffset() + required_reader +
737736
"{{ACCESS}}.union(o) }";
@@ -755,7 +754,8 @@ class SwiftGenerator : public BaseGenerator {
755754
code_ += GenArrayMainBody(nullable) + GenOffset() + "\\";
756755
} else {
757756
code_ +=
758-
"{{ACCESS_TYPE}} func {{VALUENAME}}<T: FlatBufferObject>(at index: "
757+
"{{ACCESS_TYPE}} func {{VALUENAME}}<T: FlatbuffersInitializable>(at "
758+
"index: "
759759
"Int32, type: T.Type) -> T? { " +
760760
GenOffset() + "\\";
761761
}
@@ -884,7 +884,7 @@ class SwiftGenerator : public BaseGenerator {
884884
code_ += "}";
885885
code_ +=
886886
"{{ACCESS_TYPE}} func pack(builder: inout FlatBufferBuilder) -> "
887-
"Offset<UOffset> {";
887+
"Offset {";
888888
Indent();
889889
BuildUnionEnumSwitchCaseWritter(enum_def);
890890
Outdent();
@@ -907,9 +907,9 @@ class SwiftGenerator : public BaseGenerator {
907907
"{{ACCESS_TYPE}} static func pack(_ builder: inout FlatBufferBuilder, "
908908
"obj: "
909909
"inout " +
910-
name + "?) -> Offset<UOffset> {";
910+
name + "?) -> Offset {";
911911
Indent();
912-
code_ += "guard var obj = obj else { return Offset<UOffset>() }";
912+
code_ += "guard var obj = obj else { return Offset() }";
913913
code_ += "return pack(&builder, obj: &obj)";
914914
Outdent();
915915
code_ += "}";
@@ -918,7 +918,7 @@ class SwiftGenerator : public BaseGenerator {
918918
"{{ACCESS_TYPE}} static func pack(_ builder: inout FlatBufferBuilder, "
919919
"obj: "
920920
"inout " +
921-
name + ") -> Offset<UOffset> {";
921+
name + ") -> Offset {";
922922
Indent();
923923
}
924924

@@ -1032,8 +1032,7 @@ class SwiftGenerator : public BaseGenerator {
10321032
code_ +=
10331033
"let __" + name + " = builder.create(string: obj." + name + ")";
10341034
} else {
1035-
BuildingOptionalObjects(name, "String",
1036-
"builder.create(string: s)");
1035+
BuildingOptionalObjects(name, "builder.create(string: s)");
10371036
}
10381037
break;
10391038
}
@@ -1059,7 +1058,7 @@ class SwiftGenerator : public BaseGenerator {
10591058
auto vectortype = field.value.type.VectorType();
10601059
switch (vectortype.base_type) {
10611060
case BASE_TYPE_UNION: {
1062-
code_ += "var __" + name + "__: [Offset<UOffset>] = []";
1061+
code_ += "var __" + name + "__: [Offset] = []";
10631062
code_ += "for i in obj." + name + " {";
10641063
Indent();
10651064
code_ += "guard let off = i?.pack(builder: &builder) else { continue }";
@@ -1076,7 +1075,7 @@ class SwiftGenerator : public BaseGenerator {
10761075
case BASE_TYPE_STRUCT: {
10771076
if (field.value.type.struct_def &&
10781077
!field.value.type.struct_def->fixed) {
1079-
code_ += "var __" + name + "__: [Offset<UOffset>] = []";
1078+
code_ += "var __" + name + "__: [Offset] = []";
10801079
code_ += "for var i in obj." + name + " {";
10811080
Indent();
10821081
code_ +=
@@ -1116,16 +1115,15 @@ class SwiftGenerator : public BaseGenerator {
11161115
}
11171116

11181117
void BuildingOptionalObjects(const std::string &name,
1119-
const std::string &object_type,
11201118
const std::string &body_front) {
1121-
code_ += "let __" + name + ": Offset<" + object_type + ">";
1119+
code_ += "let __" + name + ": Offset";
11221120
code_ += "if let s = obj." + name + " {";
11231121
Indent();
11241122
code_ += "__" + name + " = " + body_front;
11251123
Outdent();
11261124
code_ += "} else {";
11271125
Indent();
1128-
code_ += "__" + name + " = Offset<" + object_type + ">()";
1126+
code_ += "__" + name + " = Offset()";
11291127
Outdent();
11301128
code_ += "}";
11311129
code_ += "";
@@ -1304,10 +1302,7 @@ class SwiftGenerator : public BaseGenerator {
13041302
auto ev_name = Name(field);
13051303
auto type = GenType(field.union_type);
13061304
auto is_struct = IsStruct(field.union_type) ? type + Mutable() : type;
1307-
if (field.union_type.base_type == BASE_TYPE_NONE ||
1308-
IsString(field.union_type)) {
1309-
continue;
1310-
}
1305+
if (field.union_type.base_type == BASE_TYPE_NONE) { continue; }
13111306
code_ += "case ." + ev_name + ":";
13121307
Indent();
13131308
code_ += "var __obj = value as? " + GenType(field.union_type, true);
@@ -1334,10 +1329,7 @@ class SwiftGenerator : public BaseGenerator {
13341329
for (auto it = ev.Vals().begin(); it < ev.Vals().end(); ++it) {
13351330
auto field = **it;
13361331
auto ev_name = Name(field);
1337-
if (field.union_type.base_type == BASE_TYPE_NONE ||
1338-
IsString(field.union_type)) {
1339-
continue;
1340-
}
1332+
if (field.union_type.base_type == BASE_TYPE_NONE) { continue; }
13411333
auto type = IsStruct(field.union_type)
13421334
? GenType(field.union_type) + Mutable()
13431335
: GenType(field.union_type);
@@ -1515,7 +1507,7 @@ class SwiftGenerator : public BaseGenerator {
15151507
return WrapInNameSpace(struct_.defined_namespace, Name(struct_));
15161508
}
15171509
case BASE_TYPE_UNION:
1518-
default: return "FlatBufferObject";
1510+
default: return "FlatbuffersInitializable";
15191511
}
15201512
}
15211513

0 commit comments

Comments
 (0)