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\}