Merge pull request #497 from zukaitis/master
Added type_override option, and its handling to generator
diff --git a/generator/nanopb_generator.py b/generator/nanopb_generator.py
index 79e05e9..dea2f29 100755
--- a/generator/nanopb_generator.py
+++ b/generator/nanopb_generator.py
@@ -417,6 +417,9 @@
else:
raise NotImplementedError(field_options.type)
+ if field_options.HasField("type_override"):
+ desc.type = field_options.type_override
+
# Decide the C data type to use in the struct.
if desc.type in datatypes:
self.ctype, self.pbtype, self.enc_size, self.data_item_size = datatypes[desc.type]
diff --git a/generator/proto/nanopb.proto b/generator/proto/nanopb.proto
index f0f4a1a..6a3c620 100644
--- a/generator/proto/nanopb.proto
+++ b/generator/proto/nanopb.proto
@@ -138,6 +138,9 @@
// Package name that applies only for nanopb.
optional string package = 25;
+
+ // Override type of the field in generated C code. Only to be used with related field types
+ optional google.protobuf.FieldDescriptorProto.Type type_override = 27;
}
// Extensions to protoc 'Descriptor' type in order to define options
diff --git a/tests/options/options.proto b/tests/options/options.proto
index e8c3f46..28ea2d5 100644
--- a/tests/options/options.proto
+++ b/tests/options/options.proto
@@ -110,3 +110,10 @@
optional int32 missing = 2 [(nanopb).default_has = false];
optional int32 normal = 3;
}
+
+// Overriden type in generated C code
+message TypeOverrideMessage
+{
+ required Enum1 normal = 1;
+ required Enum1 overriden = 2 [(nanopb).type_override = TYPE_UINT32];
+}
diff --git a/tests/options/options_h.expected b/tests/options/options_h.expected
index 9e47e6a..9e3be16 100644
--- a/tests/options/options_h.expected
+++ b/tests/options/options_h.expected
@@ -17,4 +17,8 @@
\s+PB_MSG\(105,[0-9]*,Message5\) \\
#define Message5_msgid 105
! has_proto3field
+Enum1 normal
+uint32_t overriden
+#define TypeOverrideMessage_init_default[ ]*\{_Enum1_MIN, 0\}
+#define TypeOverrideMessage_init_zero[ ]*\{_Enum1_MIN, 0\}