1package api
2
3type persistAPIType struct {
4	output bool
5	input  bool
6}
7
8type persistAPITypes map[string]map[string]persistAPIType
9
10func (ts persistAPITypes) Lookup(serviceName, opName string) persistAPIType {
11	service, ok := shamelist[serviceName]
12	if !ok {
13		return persistAPIType{}
14	}
15
16	return service[opName]
17}
18
19func (ts persistAPITypes) Input(serviceName, opName string) bool {
20	return ts.Lookup(serviceName, opName).input
21}
22
23func (ts persistAPITypes) Output(serviceName, opName string) bool {
24	return ts.Lookup(serviceName, opName).output
25}
26
27// shamelist is used to not rename certain operation's input and output shapes.
28// We need to maintain backwards compatibility with pre-existing services. Since
29// not generating unique input/output shapes is not desired, we will generate
30// unique input/output shapes for new operations.
31var shamelist = persistAPITypes{
32	"APIGateway": {
33		"CreateApiKey": {
34			output: true,
35		},
36		"CreateAuthorizer": {
37			output: true,
38		},
39		"CreateBasePathMapping": {
40			output: true,
41		},
42		"CreateDeployment": {
43			output: true,
44		},
45		"CreateDocumentationPart": {
46			output: true,
47		},
48		"CreateDocumentationVersion": {
49			output: true,
50		},
51		"CreateDomainName": {
52			output: true,
53		},
54		"CreateModel": {
55			output: true,
56		},
57		"CreateResource": {
58			output: true,
59		},
60		"CreateRestApi": {
61			output: true,
62		},
63		"CreateStage": {
64			output: true,
65		},
66		"CreateUsagePlan": {
67			output: true,
68		},
69		"CreateUsagePlanKey": {
70			output: true,
71		},
72		"GenerateClientCertificate": {
73			output: true,
74		},
75		"GetAccount": {
76			output: true,
77		},
78		"GetApiKey": {
79			output: true,
80		},
81		"GetAuthorizer": {
82			output: true,
83		},
84		"GetBasePathMapping": {
85			output: true,
86		},
87		"GetClientCertificate": {
88			output: true,
89		},
90		"GetDeployment": {
91			output: true,
92		},
93		"GetDocumentationPart": {
94			output: true,
95		},
96		"GetDocumentationVersion": {
97			output: true,
98		},
99		"GetDomainName": {
100			output: true,
101		},
102		"GetIntegration": {
103			output: true,
104		},
105		"GetIntegrationResponse": {
106			output: true,
107		},
108		"GetMethod": {
109			output: true,
110		},
111		"GetMethodResponse": {
112			output: true,
113		},
114		"GetModel": {
115			output: true,
116		},
117		"GetResource": {
118			output: true,
119		},
120		"GetRestApi": {
121			output: true,
122		},
123		"GetSdkType": {
124			output: true,
125		},
126		"GetStage": {
127			output: true,
128		},
129		"GetUsage": {
130			output: true,
131		},
132		"GetUsagePlan": {
133			output: true,
134		},
135		"GetUsagePlanKey": {
136			output: true,
137		},
138		"ImportRestApi": {
139			output: true,
140		},
141		"PutIntegration": {
142			output: true,
143		},
144		"PutIntegrationResponse": {
145			output: true,
146		},
147		"PutMethod": {
148			output: true,
149		},
150		"PutMethodResponse": {
151			output: true,
152		},
153		"PutRestApi": {
154			output: true,
155		},
156		"UpdateAccount": {
157			output: true,
158		},
159		"UpdateApiKey": {
160			output: true,
161		},
162		"UpdateAuthorizer": {
163			output: true,
164		},
165		"UpdateBasePathMapping": {
166			output: true,
167		},
168		"UpdateClientCertificate": {
169			output: true,
170		},
171		"UpdateDeployment": {
172			output: true,
173		},
174		"UpdateDocumentationPart": {
175			output: true,
176		},
177		"UpdateDocumentationVersion": {
178			output: true,
179		},
180		"UpdateDomainName": {
181			output: true,
182		},
183		"UpdateIntegration": {
184			output: true,
185		},
186		"UpdateIntegrationResponse": {
187			output: true,
188		},
189		"UpdateMethod": {
190			output: true,
191		},
192		"UpdateMethodResponse": {
193			output: true,
194		},
195		"UpdateModel": {
196			output: true,
197		},
198		"UpdateResource": {
199			output: true,
200		},
201		"UpdateRestApi": {
202			output: true,
203		},
204		"UpdateStage": {
205			output: true,
206		},
207		"UpdateUsage": {
208			output: true,
209		},
210		"UpdateUsagePlan": {
211			output: true,
212		},
213	},
214	"AutoScaling": {
215		"ResumeProcesses": {
216			input: true,
217		},
218		"SuspendProcesses": {
219			input: true,
220		},
221	},
222	"CognitoIdentity": {
223		"CreateIdentityPool": {
224			output: true,
225		},
226		"DescribeIdentity": {
227			output: true,
228		},
229		"DescribeIdentityPool": {
230			output: true,
231		},
232		"UpdateIdentityPool": {
233			input:  true,
234			output: true,
235		},
236	},
237	"DirectConnect": {
238		"AllocateConnectionOnInterconnect": {
239			output: true,
240		},
241		"AllocateHostedConnection": {
242			output: true,
243		},
244		"AllocatePrivateVirtualInterface": {
245			output: true,
246		},
247		"AllocatePublicVirtualInterface": {
248			output: true,
249		},
250		"AssociateConnectionWithLag": {
251			output: true,
252		},
253		"AssociateHostedConnection": {
254			output: true,
255		},
256		"AssociateVirtualInterface": {
257			output: true,
258		},
259		"CreateConnection": {
260			output: true,
261		},
262		"CreateInterconnect": {
263			output: true,
264		},
265		"CreateLag": {
266			output: true,
267		},
268		"CreatePrivateVirtualInterface": {
269			output: true,
270		},
271		"CreatePublicVirtualInterface": {
272			output: true,
273		},
274		"DeleteConnection": {
275			output: true,
276		},
277		"DeleteLag": {
278			output: true,
279		},
280		"DescribeConnections": {
281			output: true,
282		},
283		"DescribeConnectionsOnInterconnect": {
284			output: true,
285		},
286		"DescribeHostedConnections": {
287			output: true,
288		},
289		"DescribeLoa": {
290			output: true,
291		},
292		"DisassociateConnectionFromLag": {
293			output: true,
294		},
295		"UpdateLag": {
296			output: true,
297		},
298	},
299	"EC2": {
300		"AttachVolume": {
301			output: true,
302		},
303		"CreateSnapshot": {
304			output: true,
305		},
306		"CreateVolume": {
307			output: true,
308		},
309		"DetachVolume": {
310			output: true,
311		},
312		"RunInstances": {
313			output: true,
314		},
315	},
316	"EFS": {
317		"CreateFileSystem": {
318			output: true,
319		},
320		"CreateMountTarget": {
321			output: true,
322		},
323	},
324	"ElastiCache": {
325		"AddTagsToResource": {
326			output: true,
327		},
328		"ListTagsForResource": {
329			output: true,
330		},
331		"ModifyCacheParameterGroup": {
332			output: true,
333		},
334		"RemoveTagsFromResource": {
335			output: true,
336		},
337		"ResetCacheParameterGroup": {
338			output: true,
339		},
340	},
341	"ElasticBeanstalk": {
342		"ComposeEnvironments": {
343			output: true,
344		},
345		"CreateApplication": {
346			output: true,
347		},
348		"CreateApplicationVersion": {
349			output: true,
350		},
351		"CreateConfigurationTemplate": {
352			output: true,
353		},
354		"CreateEnvironment": {
355			output: true,
356		},
357		"DescribeEnvironments": {
358			output: true,
359		},
360		"TerminateEnvironment": {
361			output: true,
362		},
363		"UpdateApplication": {
364			output: true,
365		},
366		"UpdateApplicationVersion": {
367			output: true,
368		},
369		"UpdateConfigurationTemplate": {
370			output: true,
371		},
372		"UpdateEnvironment": {
373			output: true,
374		},
375	},
376	"ElasticTranscoder": {
377		"CreateJob": {
378			output: true,
379		},
380	},
381	"Glacier": {
382		"DescribeJob": {
383			output: true,
384		},
385		"UploadArchive": {
386			output: true,
387		},
388		"CompleteMultipartUpload": {
389			output: true,
390		},
391	},
392	"IAM": {
393		"GetContextKeysForCustomPolicy": {
394			output: true,
395		},
396		"GetContextKeysForPrincipalPolicy": {
397			output: true,
398		},
399		"SimulateCustomPolicy": {
400			output: true,
401		},
402		"SimulatePrincipalPolicy": {
403			output: true,
404		},
405	},
406	"Kinesis": {
407		"DisableEnhancedMonitoring": {
408			output: true,
409		},
410		"EnableEnhancedMonitoring": {
411			output: true,
412		},
413	},
414	"KMS": {
415		"ListGrants": {
416			output: true,
417		},
418		"ListRetirableGrants": {
419			output: true,
420		},
421	},
422	"Lambda": {
423		"CreateAlias": {
424			output: true,
425		},
426		"CreateEventSourceMapping": {
427			output: true,
428		},
429		"CreateFunction": {
430			output: true,
431		},
432		"DeleteEventSourceMapping": {
433			output: true,
434		},
435		"GetAlias": {
436			output: true,
437		},
438		"GetEventSourceMapping": {
439			output: true,
440		},
441		"GetFunctionConfiguration": {
442			output: true,
443		},
444		"PublishVersion": {
445			output: true,
446		},
447		"UpdateAlias": {
448			output: true,
449		},
450		"UpdateEventSourceMapping": {
451			output: true,
452		},
453		"UpdateFunctionCode": {
454			output: true,
455		},
456		"UpdateFunctionConfiguration": {
457			output: true,
458		},
459	},
460	"MQ": {
461		"CreateBroker": {
462			input:  true,
463			output: true,
464		},
465		"CreateConfiguration": {
466			input:  true,
467			output: true,
468		},
469		"CreateUser": {
470			input: true,
471		},
472		"DeleteBroker": {
473			output: true,
474		},
475		"DescribeBroker": {
476			output: true,
477		},
478		"DescribeUser": {
479			output: true,
480		},
481		"DescribeConfigurationRevision": {
482			output: true,
483		},
484		"ListBrokers": {
485			output: true,
486		},
487		"ListConfigurations": {
488			output: true,
489		},
490		"ListConfigurationRevisions": {
491			output: true,
492		},
493		"ListUsers": {
494			output: true,
495		},
496		"UpdateBroker": {
497			input:  true,
498			output: true,
499		},
500		"UpdateConfiguration": {
501			input:  true,
502			output: true,
503		},
504		"UpdateUser": {
505			input: true,
506		},
507	},
508	"RDS": {
509		"ModifyDBClusterParameterGroup": {
510			output: true,
511		},
512		"ModifyDBParameterGroup": {
513			output: true,
514		},
515		"ResetDBClusterParameterGroup": {
516			output: true,
517		},
518		"ResetDBParameterGroup": {
519			output: true,
520		},
521	},
522	"Redshift": {
523		"DescribeLoggingStatus": {
524			output: true,
525		},
526		"DisableLogging": {
527			output: true,
528		},
529		"EnableLogging": {
530			output: true,
531		},
532		"ModifyClusterParameterGroup": {
533			output: true,
534		},
535		"ResetClusterParameterGroup": {
536			output: true,
537		},
538	},
539	"S3": {
540		"GetBucketNotification": {
541			input:  true,
542			output: true,
543		},
544		"GetBucketNotificationConfiguration": {
545			input:  true,
546			output: true,
547		},
548	},
549	"ServerlessApplicationRepository": {
550		"CreateApplication": {
551			input: true,
552		},
553		"CreateApplicationVersion": {
554			input: true,
555		},
556		"CreateCloudFormationChangeSet": {
557			input: true,
558		},
559		"UpdateApplication": {
560			input: true,
561		},
562	},
563	"SWF": {
564		"CountClosedWorkflowExecutions": {
565			output: true,
566		},
567		"CountOpenWorkflowExecutions": {
568			output: true,
569		},
570		"CountPendingActivityTasks": {
571			output: true,
572		},
573		"CountPendingDecisionTasks": {
574			output: true,
575		},
576		"ListClosedWorkflowExecutions": {
577			output: true,
578		},
579		"ListOpenWorkflowExecutions": {
580			output: true,
581		},
582	},
583}
584