Skip to content

Commit 63495b9

Browse files
Jeroen Demeyerdbaileychess
andauthored
Support file_identifier in Go (#7904)
Co-authored-by: Derek Bailey <derekbailey@google.com>
1 parent 56ecc1f commit 63495b9

File tree

13 files changed

+200
-13
lines changed

13 files changed

+200
-13
lines changed

go/lib.go

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,3 +28,23 @@ func GetSizePrefix(buf []byte, offset UOffsetT) uint32 {
2828
func GetIndirectOffset(buf []byte, offset UOffsetT) UOffsetT {
2929
return offset + GetUOffsetT(buf[offset:])
3030
}
31+
32+
// GetBufferIdentifier returns the file identifier as string
33+
func GetBufferIdentifier(buf []byte) string {
34+
return string(buf[SizeUOffsetT:][:fileIdentifierLength])
35+
}
36+
37+
// GetBufferIdentifier returns the file identifier as string for a size-prefixed buffer
38+
func GetSizePrefixedBufferIdentifier(buf []byte) string {
39+
return string(buf[SizeUOffsetT+sizePrefixLength:][:fileIdentifierLength])
40+
}
41+
42+
// BufferHasIdentifier checks if the identifier in a buffer has the expected value
43+
func BufferHasIdentifier(buf []byte, identifier string) bool {
44+
return GetBufferIdentifier(buf) == identifier
45+
}
46+
47+
// BufferHasIdentifier checks if the identifier in a buffer has the expected value for a size-prefixed buffer
48+
func SizePrefixedBufferHasIdentifier(buf []byte, identifier string) bool {
49+
return GetSizePrefixedBufferIdentifier(buf) == identifier
50+
}

grpc/examples/go/greeter/models/HelloReply.go

Lines changed: 8 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

grpc/examples/go/greeter/models/HelloRequest.go

Lines changed: 8 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src/idl_gen_go.cpp

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -292,6 +292,14 @@ class GoGenerator : public BaseGenerator {
292292
const std::string size_prefix[] = { "", "SizePrefixed" };
293293
const std::string struct_type = namer_.Type(struct_def);
294294

295+
bool has_file_identifier = (parser_.root_struct_def_ == &struct_def) &&
296+
parser_.file_identifier_.length();
297+
298+
if (has_file_identifier) {
299+
code += "const " + struct_type + "Identifier = \"" +
300+
parser_.file_identifier_ + "\"\n\n";
301+
}
302+
295303
for (int i = 0; i < 2; i++) {
296304
code += "func Get" + size_prefix[i] + "RootAs" + struct_type;
297305
code += "(buf []byte, offset flatbuffers.UOffsetT) ";
@@ -312,6 +320,26 @@ class GoGenerator : public BaseGenerator {
312320
}
313321
code += "\treturn x\n";
314322
code += "}\n\n";
323+
324+
code += "func Finish" + size_prefix[i] + struct_type +
325+
"Buffer(builder *flatbuffers.Builder, offset "
326+
"flatbuffers.UOffsetT) {\n";
327+
if (has_file_identifier) {
328+
code += "\tidentifierBytes := []byte(" + struct_type + "Identifier)\n";
329+
code += "\tbuilder.Finish" + size_prefix[i] +
330+
"WithFileIdentifier(offset, identifierBytes)\n";
331+
} else {
332+
code += "\tbuilder.Finish" + size_prefix[i] + "(offset)\n";
333+
}
334+
code += "}\n\n";
335+
336+
if (has_file_identifier) {
337+
code += "func " + size_prefix[i] + struct_type +
338+
"BufferHasIdentifier(buf []byte) bool {\n";
339+
code += "\treturn flatbuffers." + size_prefix[i] +
340+
"BufferHasIdentifier(buf, " + struct_type + "Identifier)\n";
341+
code += "}\n\n";
342+
}
315343
}
316344
}
317345

tests/MyGame/Example/Monster.go

Lines changed: 20 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

tests/MyGame/Example/Referrable.go

Lines changed: 8 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

tests/MyGame/Example/Stat.go

Lines changed: 8 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

tests/MyGame/Example/TestSimpleTableWithEnum.go

Lines changed: 8 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

tests/MyGame/Example/TypeAliases.go

Lines changed: 8 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

tests/MyGame/Example2/Monster.go

Lines changed: 8 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)