Allow specifying descriptorsize on field level also (#546)
diff --git a/generator/nanopb_generator.py b/generator/nanopb_generator.py
index 8e1074c..445b149 100755
--- a/generator/nanopb_generator.py
+++ b/generator/nanopb_generator.py
@@ -1014,6 +1014,8 @@
         self.oneofs = {}
         self.desc = desc
         self.math_include_required = False
+        self.packed = message_options.packed_struct
+        self.descriptorsize = message_options.descriptorsize
 
         if message_options.msgid:
             self.msgid = message_options.msgid
@@ -1030,9 +1032,6 @@
                     self.callback_function = "%s_callback" % self.name
                     break
 
-        self.packed = message_options.packed_struct
-        self.descriptorsize = message_options.descriptorsize
-
     def load_fields(self, desc, message_options):
         '''Load field list from DescriptorProto'''
 
@@ -1056,6 +1055,9 @@
             if field_options.type == nanopb_pb2.FT_IGNORE:
                 continue
 
+            if field_options.descriptorsize > self.descriptorsize:
+                self.descriptorsize = field_options.descriptorsize
+
             field = Field(self.name, f, field_options)
             if (hasattr(f, 'oneof_index') and
                 f.HasField('oneof_index') and
diff --git a/tests/options/options.proto b/tests/options/options.proto
index 28ea2d5..10acca6 100644
--- a/tests/options/options.proto
+++ b/tests/options/options.proto
@@ -103,6 +103,14 @@
     required int32 foo = 1;
 }
 
+// Wide descriptor option in a single field
+message WideMessage2
+{
+    required int32 foo = 1 [(nanopb).descriptorsize = DS_8];
+    required int32 foo2 = 2 [(nanopb).descriptorsize = DS_4];
+    required int32 foo3 = 3;
+}
+
 // Default value for has_ field
 message HasFieldMessage
 {
diff --git a/tests/options/options_c.expected b/tests/options/options_c.expected
index 8b75530..3544555 100644
--- a/tests/options/options_c.expected
+++ b/tests/options/options_c.expected
@@ -1,2 +1,3 @@
 PB_BIND\(Message1, Message1, AUTO\)
 PB_BIND\(WideMessage, WideMessage, 4\)
+PB_BIND\(WideMessage2, WideMessage2, 8\)