Move ENUMTYPE together with other enum defines & add test (#803)
diff --git a/generator/nanopb_generator.py b/generator/nanopb_generator.py
index 77036b2..fc4f93d 100755
--- a/generator/nanopb_generator.py
+++ b/generator/nanopb_generator.py
@@ -1437,6 +1437,12 @@
Globals.naming_style.type_name(field.ctype)
)
+ return result
+
+ def enumtype_defines(self):
+ '''Defines to allow user code to refer to enum type of a specific field'''
+ result = ''
+ for field in self.all_fields():
if field.pbtype in ['ENUM', "UENUM"]:
if field.rules == 'ONEOF':
result += "#define %s_%s_%s_ENUMTYPE %s\n" % (
@@ -1913,6 +1919,9 @@
yield '/* Helper constants for enums */\n'
for enum in self.enums:
yield enum.auxiliary_defines() + '\n'
+
+ for msg in self.messages:
+ yield msg.enumtype_defines() + '\n'
yield '\n'
yield '#ifdef __cplusplus\n'
diff --git a/tests/enum_mapping/SConscript b/tests/enum_mapping/SConscript
new file mode 100644
index 0000000..92c7eb5
--- /dev/null
+++ b/tests/enum_mapping/SConscript
@@ -0,0 +1,8 @@
+# Test generated ENUMTYPE defines
+
+Import('env')
+
+env.NanopbProto('enum_mapping')
+env.Object("enum_mapping.pb.c")
+env.Match(["enum_mapping.pb.h", "enum_mapping.expected"])
+
diff --git a/tests/enum_mapping/enum_mapping.expected b/tests/enum_mapping/enum_mapping.expected
new file mode 100644
index 0000000..fd19de7
--- /dev/null
+++ b/tests/enum_mapping/enum_mapping.expected
@@ -0,0 +1,3 @@
+define TestMsg_test1_ENUMTYPE TestEnum1
+define TestMsg_oneof1_test2_ENUMTYPE TestEnum2
+
diff --git a/tests/enum_mapping/enum_mapping.proto b/tests/enum_mapping/enum_mapping.proto
new file mode 100644
index 0000000..0e26096
--- /dev/null
+++ b/tests/enum_mapping/enum_mapping.proto
@@ -0,0 +1,26 @@
+syntax = "proto3";
+
+enum TestEnum1
+{
+ A = 0;
+ B = 2;
+ C = -3;
+}
+
+enum TestEnum2
+{
+ X = 0;
+ Y = 5;
+}
+
+message TestMsg
+{
+ TestEnum1 test1 = 1;
+
+ oneof oneof1
+ {
+ TestEnum2 test2 = 2;
+ }
+}
+
+