9
9
func GenerateService (buf * Buffer , indentLevel int , service * descriptorpb.ServiceDescriptorProto ) {
10
10
indent := strings .Repeat (" " , indentLevel * 4 )
11
11
buf .Printf ("%sservice %s {" , indent , service .GetName ())
12
- GenerateHeadOptions (buf , indent , service .GetOptions ().GetUninterpretedOption ())
12
+ generateHeadOptions (buf , indent , service .GetOptions ().GetUninterpretedOption ())
13
13
for _ , method := range service .Method {
14
14
buf .Printf ("%s rpc %s(%s) returns (%s) {" , indent , method .GetName (), method .GetInputType (), method .GetOutputType ())
15
15
for _ , opt := range method .GetOptions ().GetUninterpretedOption () {
@@ -24,7 +24,7 @@ func GenerateService(buf *Buffer, indentLevel int, service *descriptorpb.Service
24
24
func GenerateEnum (buf * Buffer , indentLevel int , enum * descriptorpb.EnumDescriptorProto ) {
25
25
indent := strings .Repeat (" " , indentLevel * 4 )
26
26
buf .Printf ("%senum %s {" , indent , enum .GetName ())
27
- GenerateHeadOptions (buf , indent , enum .GetOptions ().GetUninterpretedOption ())
27
+ generateHeadOptions (buf , indent , enum .GetOptions ().GetUninterpretedOption ())
28
28
29
29
for _ , value := range enum .Value {
30
30
buf .Printf ("%s %s = %d%s;" , indent , value .GetName (), value .GetNumber (), StringifyValueOptions (value .GetOptions ().GetUninterpretedOption ()))
@@ -35,27 +35,30 @@ func GenerateEnum(buf *Buffer, indentLevel int, enum *descriptorpb.EnumDescripto
35
35
func GenerateMessage (buf * Buffer , indentLevel int , message * descriptorpb.DescriptorProto ) {
36
36
indent := strings .Repeat (" " , indentLevel * 4 )
37
37
buf .Printf ("%smessage %s {" , indent , message .GetName ())
38
- GenerateHeadOptions (buf , indent , message .GetOptions ().GetUninterpretedOption ())
38
+ generateHeadOptions (buf , indent , message .GetOptions ().GetUninterpretedOption ())
39
39
for _ , field := range message .GetField () {
40
40
buf .Printf ("%s %s %s = %d%s;" , indent , StringifyField (message , field ), field .GetName (), field .GetNumber (), StringifyValueOptions (field .GetOptions ().GetUninterpretedOption ()))
41
41
}
42
42
43
- for _ , enum := range message .EnumType {
43
+ for _ , enum := range message .GetEnumType () {
44
44
buf .Printf ("" )
45
45
GenerateEnum (buf , indentLevel + 1 , enum )
46
46
}
47
47
48
- for _ , nested := range message .NestedType {
48
+ for _ , nested := range message .GetNestedType () {
49
49
if nested .GetOptions ().GetMapEntry () {
50
50
continue
51
51
}
52
52
buf .Printf ("" )
53
53
GenerateMessage (buf , indentLevel + 1 , nested )
54
54
}
55
+
56
+ buf .Printf ("" )
57
+ GenerateExtensions (buf , indentLevel + 1 , message , message .GetExtension ())
55
58
buf .Printf ("%s}" , indent )
56
59
}
57
60
58
- func GenerateHeadOptions (buf * Buffer , indent string , options []* descriptorpb.UninterpretedOption ) {
61
+ func generateHeadOptions (buf * Buffer , indent string , options []* descriptorpb.UninterpretedOption ) {
59
62
if len (options ) == 0 {
60
63
return
61
64
}
@@ -64,3 +67,19 @@ func GenerateHeadOptions(buf *Buffer, indent string, options []*descriptorpb.Uni
64
67
}
65
68
buf .Printf ("" )
66
69
}
70
+
71
+ func GenerateExtensions (buf * Buffer , indentLevel int , message * descriptorpb.DescriptorProto , extensions []* descriptorpb.FieldDescriptorProto ) {
72
+ grouped := map [string ][]* descriptorpb.FieldDescriptorProto {}
73
+ for _ , ext := range extensions {
74
+ grouped [ext .GetExtendee ()] = append (grouped [ext .GetExtendee ()], ext )
75
+ }
76
+ indent := strings .Repeat (" " , indentLevel * 4 )
77
+ for extendee , exts := range grouped {
78
+
79
+ buf .Printf ("%sextend %s {" , indent , extendee )
80
+ for _ , ext := range exts {
81
+ buf .Printf ("%s %s %s = %d%s;" , indent , StringifyField (message , ext ), ext .GetName (), ext .GetNumber (), StringifyValueOptions (ext .GetOptions ().GetUninterpretedOption ()))
82
+ }
83
+ buf .Printf ("%s}" , indent )
84
+ }
85
+ }
0 commit comments