Skip to content

Commit 6f3c992

Browse files
Mizuchimeta-codesync[bot]
authored andcommitted
add name_v to reflection API
Summary: After this diff, we can replace ``` fatal::z_data<member::name>() ``` with ``` member::name_v ``` And eventually get rid of legacy reflection codegen for struct/field names. Reviewed By: aristidisp Differential Revision: D89331661 fbshipit-source-id: a0e767fea7ed4101c47b292b94ffd75fbc1be467
1 parent 51b37ba commit 6f3c992

2 files changed

Lines changed: 20 additions & 2 deletions

File tree

third-party/thrift/src/thrift/lib/cpp2/reflection/reflection.h

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -446,7 +446,12 @@ reflected_struct {
446446
*
447447
* @author: Marcelo Juchem <marcelo@fb.com>
448448
*/
449-
using name = typename Traits::name;
449+
using name [[deprecated("Use name_v instead")]] = typename Traits::name;
450+
451+
/**
452+
* A run-time string representing the struct name.
453+
*/
454+
static inline const auto name_v = op::get_class_name_v<type>;
450455

451456
/**
452457
* An implementation defined type template that provides the appropriate
@@ -559,7 +564,13 @@ struct reflected_struct_data_member {
559564
*
560565
* @author: Marcelo Juchem <marcelo@fb.com>
561566
*/
562-
using name = typename Traits::name;
567+
using name [[deprecated("Use name_v instead")]] = typename Traits::name;
568+
569+
/**
570+
* A run-time string representing the struct field name.
571+
*/
572+
static inline const auto name_v =
573+
op::get_name_v<typename Traits::owner, typename Traits::tag>;
563574

564575
/**
565576
* The type of the data member.

third-party/thrift/src/thrift/test/reflection/fatal_struct_test.cpp

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -74,6 +74,7 @@ TEST(FatalStruct, Struct1SanityCheck) {
7474

7575
EXPECT_SAME<struct1, traits::type>();
7676
EXPECT_SAME<struct1s, traits::name>();
77+
EXPECT_EQ("struct1", traits::name_v);
7778

7879
EXPECT_SAME<traits, apache::thrift::try_reflect_struct<struct1, void>>();
7980
EXPECT_SAME<void, apache::thrift::try_reflect_struct<int, void>>();
@@ -84,6 +85,12 @@ TEST(FatalStruct, Struct1SanityCheck) {
8485
EXPECT_SAME<field3s, traits::member::field3::name>();
8586
EXPECT_SAME<field4s, traits::member::field4::name>();
8687
EXPECT_SAME<field5s, traits::member::field5::name>();
88+
EXPECT_EQ("field0", traits::member::field0::name_v);
89+
EXPECT_EQ("field1", traits::member::field1::name_v);
90+
EXPECT_EQ("field2", traits::member::field2::name_v);
91+
EXPECT_EQ("field3", traits::member::field3::name_v);
92+
EXPECT_EQ("field4", traits::member::field4::name_v);
93+
EXPECT_EQ("field5", traits::member::field5::name_v);
8794

8895
struct1 pod;
8996
*pod.field0() = 19;

0 commit comments

Comments
 (0)