Add UnpackFlatbuffer() method for quality-of-life
Change-Id: I211d3642b39f6183d5f1694931c03ac7f00dd0f0
Signed-off-by: James Kuszmaul <jabukuszmaul+collab@gmail.com>
diff --git a/aos/flatbuffers.h b/aos/flatbuffers.h
index ed9c8ac..a299fe9 100644
--- a/aos/flatbuffers.h
+++ b/aos/flatbuffers.h
@@ -529,6 +529,15 @@
std::shared_ptr<absl::Span<uint8_t>> span_;
};
+// The regular flatbuffer API makes it surprisingly irritating to unpack an
+// Object into an ObjectT without a bunch of extra lines.
+template <typename T>
+T::NativeTableType UnpackFlatbuffer(const T *fbs) {
+ typename T::NativeTableType object;
+ fbs->UnPackTo(&object);
+ return object;
+}
+
} // namespace aos
#endif // AOS_FLATBUFFERS_H_
diff --git a/aos/flatbuffers_test.cc b/aos/flatbuffers_test.cc
index dbbe817..333d5d7 100644
--- a/aos/flatbuffers_test.cc
+++ b/aos/flatbuffers_test.cc
@@ -23,6 +23,16 @@
EXPECT_FALSE(empty.Verify());
}
+// Test that the UnpackFlatbuffer builds & works.
+TEST(FlatbufferTest, UnpackFlatbuffer) {
+ const FlatbufferDetachedBuffer<Location> fb =
+ JsonToFlatbuffer<Location>("{\"name\": \"abc\", \"frequency\": 971}");
+
+ LocationT object = UnpackFlatbuffer(&fb.message());
+ EXPECT_EQ("abc", object.name);
+ EXPECT_EQ(971, object.frequency);
+}
+
// Tests the ability to map a flatbuffer on disk to memory
TEST(FlatbufferMMapTest, Verify) {
FlatbufferDetachedBuffer<Configuration> fb =