Add __repr__() to generator types to ease debugging
diff --git a/generator/nanopb_generator.py b/generator/nanopb_generator.py
index 0ec8839..c53b481 100755
--- a/generator/nanopb_generator.py
+++ b/generator/nanopb_generator.py
@@ -242,6 +242,9 @@
     def __str__(self):
         return '_'.join(self.parts)
 
+    def __repr__(self):
+        return 'Names(%s)' % ','.join("'%s'" % x for x in self.parts)
+
     def __add__(self, other):
         if isinstance(other, strtypes):
             return Names(self.parts + (other,))
@@ -324,6 +327,9 @@
         else:
             return '(' + str(self.value) + ' + ' + ' + '.join(self.symbols) + ')'
 
+    def __repr__(self):
+        return 'EncodedSize(%s, %s, %s, %s)' % (self.value, self.symbols, self.declarations, self.required_defines)
+
     def get_declarations(self):
         '''Get any declarations that must appear alongside this encoded size definition,
         such as helper union {} types.'''
@@ -436,6 +442,9 @@
     def encoded_size(self):
         return max([varint_max_size(v) for n,v in self.values])
 
+    def __repr__(self):
+        return 'Enum(%s)' % self.names
+
     def __str__(self):
         leading_comment, trailing_comment = self.get_comments()
 
@@ -711,6 +720,9 @@
     def __lt__(self, other):
         return self.tag < other.tag
 
+    def __repr__(self):
+        return 'Field(%s)' % self.name
+
     def __str__(self):
         result = ''
 
@@ -1319,6 +1331,9 @@
             deps += f.get_dependencies()
         return deps
 
+    def __repr__(self):
+        return 'Message(%s)' % self.name
+
     def __str__(self):
         leading_comment, trailing_comment = self.get_comments()