@@ -2,6 +2,7 @@ package plugin
22
33import (
44 "fmt"
5+ "sort"
56
67 temporalv1 "github.com/cludden/protoc-gen-go-temporal/gen/temporal/v1"
78 g "github.com/dave/jennifer/jen"
@@ -24,12 +25,16 @@ const (
2425type Service struct {
2526 * protogen.Plugin
2627 * protogen.Service
27- opts * temporalv1.ServiceOptions
28- activities map [string ]* temporalv1.ActivityOptions
29- methods map [string ]* protogen.Method
30- queries map [string ]* temporalv1.QueryOptions
31- signals map [string ]* temporalv1.SignalOptions
32- workflows map [string ]* temporalv1.WorkflowOptions
28+ opts * temporalv1.ServiceOptions
29+ activitiesOrdered []string
30+ activities map [string ]* temporalv1.ActivityOptions
31+ methods map [string ]* protogen.Method
32+ queriesOrdered []string
33+ queries map [string ]* temporalv1.QueryOptions
34+ signalsOrdered []string
35+ signals map [string ]* temporalv1.SignalOptions
36+ workflowsOrdered []string
37+ workflows map [string ]* temporalv1.WorkflowOptions
3338}
3439
3540// parseService extracts a Service from a protogen.Service value
@@ -54,20 +59,28 @@ func parseService(p *protogen.Plugin, service *protogen.Service) *Service {
5459
5560 if opts , ok := proto .GetExtension (method .Desc .Options (), temporalv1 .E_Activity ).(* temporalv1.ActivityOptions ); ok && opts != nil {
5661 svc .activities [name ] = opts
62+ svc .activitiesOrdered = append (svc .activitiesOrdered , name )
5763 }
5864
5965 if opts , ok := proto .GetExtension (method .Desc .Options (), temporalv1 .E_Query ).(* temporalv1.QueryOptions ); ok && opts != nil {
6066 svc .queries [name ] = opts
67+ svc .queriesOrdered = append (svc .queriesOrdered , name )
6168 }
6269
6370 if opts , ok := proto .GetExtension (method .Desc .Options (), temporalv1 .E_Signal ).(* temporalv1.SignalOptions ); ok && opts != nil {
6471 svc .signals [name ] = opts
72+ svc .signalsOrdered = append (svc .signalsOrdered , name )
6573 }
6674
6775 if opts , ok := proto .GetExtension (method .Desc .Options (), temporalv1 .E_Workflow ).(* temporalv1.WorkflowOptions ); ok && opts != nil {
6876 svc .workflows [name ] = opts
77+ svc .workflowsOrdered = append (svc .workflowsOrdered , name )
6978 }
7079 }
80+ sort .Strings (svc .activitiesOrdered )
81+ sort .Strings (svc .queriesOrdered )
82+ sort .Strings (svc .signalsOrdered )
83+ sort .Strings (svc .workflowsOrdered )
7184 return & svc
7285}
7386
@@ -81,7 +94,8 @@ func (svc *Service) render(f *g.File) {
8194 svc .genClientConstructor (f )
8295
8396 // generate client workflow methods
84- for workflow , opts := range svc .workflows {
97+ for _ , workflow := range svc .workflowsOrdered {
98+ opts := svc .workflows [workflow ]
8599 svc .genClientWorkflowExecute (f , workflow )
86100 svc .genClientWorkflowGet (f , workflow )
87101 for _ , signal := range opts .GetSignal () {
@@ -92,17 +106,18 @@ func (svc *Service) render(f *g.File) {
92106 }
93107
94108 // generate client query methods
95- for query := range svc .queries {
109+ for _ , query := range svc .queriesOrdered {
96110 svc .genClientQueryMethod (f , query )
97111 }
98112
99113 // generate client signal methods
100- for signal := range svc .signals {
114+ for _ , signal := range svc .signalsOrdered {
101115 svc .genClientSignalMethod (f , signal )
102116 }
103117
104118 // generate <Workflow>Run interfaces and implementations used by client
105- for workflow , opts := range svc .workflows {
119+ for _ , workflow := range svc .workflowsOrdered {
120+ opts := svc .workflows [workflow ]
106121 svc .genClientWorkflowRunInterface (f , workflow )
107122 svc .genClientWorkflowRun (f , workflow )
108123 svc .genClientWorkflowRunIDMethod (f , workflow )
@@ -125,7 +140,7 @@ func (svc *Service) render(f *g.File) {
125140 svc .genRegisterWorkflows (f )
126141
127142 // generate workflow types, methods, functions
128- for workflow := range svc .workflows {
143+ for _ , workflow := range svc .workflowsOrdered {
129144 svc .genRegisterWorkflow (f , workflow )
130145 svc .genWorkflowWorkerBuilderFunction (f , workflow )
131146 svc .genWorkflowWorker (f , workflow )
@@ -142,7 +157,7 @@ func (svc *Service) render(f *g.File) {
142157 }
143158
144159 // generate signal types, methods, functions
145- for signal := range svc .signals {
160+ for _ , signal := range svc .signalsOrdered {
146161 svc .genWorkerSignal (f , signal )
147162 svc .genWorkerSignalReceive (f , signal )
148163 svc .genWorkerSignalReceiveAsync (f , signal )
@@ -153,7 +168,7 @@ func (svc *Service) render(f *g.File) {
153168 // generate activities
154169 svc .genActivitiesInterface (f )
155170 svc .genRegisterActivities (f )
156- for activity := range svc .activities {
171+ for _ , activity := range svc .activitiesOrdered {
157172 svc .genRegisterActivity (f , activity )
158173 svc .genActivityFuture (f , activity )
159174 svc .genActivityFutureGetMethod (f , activity )
@@ -169,7 +184,7 @@ func (svc *Service) genConstants(f *g.File) {
169184 if len (svc .workflows ) > 0 {
170185 f .Commentf ("%s workflow names" , svc .GoName )
171186 f .Const ().DefsFunc (func (defs * g.Group ) {
172- for workflow := range svc .workflows {
187+ for _ , workflow := range svc .workflowsOrdered {
173188 method := svc .methods [workflow ]
174189 defs .Id (fmt .Sprintf ("%sName" , workflow )).Op ("=" ).Lit (string (method .Desc .FullName ()))
175190 }
@@ -178,7 +193,8 @@ func (svc *Service) genConstants(f *g.File) {
178193
179194 // add id prefixes
180195 workflowsIdPrefixes := map [string ]string {}
181- for workflow , opts := range svc .workflows {
196+ for _ , workflow := range svc .workflowsOrdered {
197+ opts := svc .workflows [workflow ]
182198 if prefix := opts .GetDefaultOptions ().GetIdPrefix (); prefix != "" {
183199 workflowsIdPrefixes [workflow ] = prefix
184200 }
@@ -196,7 +212,7 @@ func (svc *Service) genConstants(f *g.File) {
196212 if len (svc .queries ) > 0 {
197213 f .Commentf ("%s query names" , svc .GoName )
198214 f .Const ().DefsFunc (func (defs * g.Group ) {
199- for query := range svc .queries {
215+ for _ , query := range svc .queriesOrdered {
200216 method := svc .methods [query ]
201217 defs .Id (fmt .Sprintf ("%sName" , query )).Op ("=" ).Lit (string (method .Desc .FullName ()))
202218 }
@@ -207,7 +223,7 @@ func (svc *Service) genConstants(f *g.File) {
207223 if len (svc .signals ) > 0 {
208224 f .Commentf ("%s signal names" , svc .GoName )
209225 f .Const ().DefsFunc (func (defs * g.Group ) {
210- for signal := range svc .signals {
226+ for _ , signal := range svc .signalsOrdered {
211227 method := svc .methods [signal ]
212228 defs .Id (fmt .Sprintf ("%sName" , signal )).Op ("=" ).Lit (string (method .Desc .FullName ()))
213229 }
@@ -218,7 +234,7 @@ func (svc *Service) genConstants(f *g.File) {
218234 if len (svc .activities ) > 0 {
219235 f .Commentf ("%s activity names" , svc .GoName )
220236 f .Const ().DefsFunc (func (defs * g.Group ) {
221- for activity := range svc .activities {
237+ for _ , activity := range svc .activitiesOrdered {
222238 method := svc .methods [activity ]
223239 defs .Id (fmt .Sprintf ("%sName" , activity )).Op ("=" ).Lit (string (method .Desc .FullName ()))
224240 }
0 commit comments