Commit 6e296e64 authored by Paul Jewell's avatar Paul Jewell Committed by Facebook Github Bot

Adding DynamicConstructor specialization for enums

Summary:
A specialization for reading into enums from serialized form was added a while back. Unfortunately, no corresponding change to serialize from enums into a dynamic was added.

This change adds the corresponding DynamicConstructor specialization for enums to allow serializing enums and objects containing enums.

Reviewed By: ot, shixiao

Differential Revision: D14091417

fbshipit-source-id: 15ef8bc46843cd668b4b2c991e84167dabaf69fa
parent e11c6fe8
......@@ -328,6 +328,17 @@ struct DynamicConstructor<
}
};
// enums
template <typename C>
struct DynamicConstructor<
C,
typename std::enable_if<std::is_enum<C>::value>::type> {
static dynamic construct(const C& x) {
using type = typename std::underlying_type<C>::type;
return dynamic(static_cast<type>(x));
}
};
// maps
template <typename C>
struct DynamicConstructor<
......
......@@ -386,6 +386,24 @@ TEST(DynamicConverter, construct) {
dynamic d = dynamic::array(true, false);
EXPECT_EQ(d, toDynamic(vb));
}
{
enum enum1 { foo = 1, bar = 2 };
dynamic d1 = 1;
EXPECT_EQ(d1, toDynamic(enum1::foo));
dynamic d2 = 2;
EXPECT_EQ(d2, toDynamic(enum1::bar));
enum class enum2 : char { FOO = 'a', BAR = 'b' };
dynamic d3 = 'a';
EXPECT_EQ(d3, toDynamic(enum2::FOO));
dynamic d4 = 'b';
EXPECT_EQ(d4, toDynamic(enum2::BAR));
}
}
TEST(DynamicConverter, errors) {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment