To DartConvertor, add a partial template specialization that handles enum classes.
Change-Id: Icc428b58dfc255a20ef325463e776f66b19a4d6a
diff --git a/converter/dart_converter.h b/converter/dart_converter.h
index 276d1e7..48ce6d2 100644
--- a/converter/dart_converter.h
+++ b/converter/dart_converter.h
@@ -167,6 +167,36 @@
struct DartConverter<double> : public DartConverterFloatingPoint<double> {};
////////////////////////////////////////////////////////////////////////////////
+// Enum Classes
+
+template <typename T>
+struct DartConverter<T, typename std::enable_if<std::is_enum<T>::value>::type> {
+ static Dart_Handle ToDart(T val) {
+ return Dart_NewInteger(
+ static_cast<typename std::underlying_type<T>::type>(val));
+ }
+
+ static void SetReturnValue(Dart_NativeArguments args, T val) {
+ Dart_SetIntegerReturnValue(
+ args, static_cast<typename std::underlying_type<T>::type>(val));
+ }
+
+ static T FromDart(Dart_Handle handle) {
+ int64_t result = 0;
+ Dart_IntegerToInt64(handle, &result);
+ return static_cast<T>(result);
+ }
+
+ static T FromArguments(Dart_NativeArguments args,
+ int index,
+ Dart_Handle& exception) {
+ int64_t result = 0;
+ Dart_GetNativeIntegerArgument(args, index, &result);
+ return static_cast<T>(result);
+ }
+};
+
+////////////////////////////////////////////////////////////////////////////////
// Strings
template <>