aws-sdk-code-generator 0.4.0.pre → 0.6.0.pre

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (72) hide show
  1. checksums.yaml +4 -4
  2. data/lib/aws-sdk-code-generator/api.rb +2 -1
  3. data/lib/aws-sdk-code-generator/client_constructor.rb +2 -1
  4. data/lib/aws-sdk-code-generator/client_operation_documentation.rb +2 -1
  5. data/lib/aws-sdk-code-generator/client_operation_list.rb +4 -0
  6. data/lib/aws-sdk-code-generator/code_builder.rb +54 -2
  7. data/lib/aws-sdk-code-generator/endpoint_parameter.rb +190 -0
  8. data/lib/aws-sdk-code-generator/eventstream_example.rb +34 -34
  9. data/lib/aws-sdk-code-generator/gem_builder.rb +3 -5
  10. data/lib/aws-sdk-code-generator/helper.rb +11 -1
  11. data/lib/aws-sdk-code-generator/plugin_list.rb +5 -2
  12. data/lib/aws-sdk-code-generator/rbs/error_list.rb +38 -0
  13. data/lib/aws-sdk-code-generator/rbs/keyword_argument_builder.rb +159 -0
  14. data/lib/aws-sdk-code-generator/rbs/method_signature.rb +11 -0
  15. data/lib/aws-sdk-code-generator/rbs/resource_action.rb +39 -0
  16. data/lib/aws-sdk-code-generator/rbs/resource_association.rb +50 -0
  17. data/lib/aws-sdk-code-generator/rbs/resource_batch_action.rb +59 -0
  18. data/lib/aws-sdk-code-generator/rbs/resource_client_request.rb +40 -0
  19. data/lib/aws-sdk-code-generator/rbs/waiter.rb +53 -0
  20. data/lib/aws-sdk-code-generator/rbs.rb +40 -0
  21. data/lib/aws-sdk-code-generator/resource_batch_action_code.rb +3 -1
  22. data/lib/aws-sdk-code-generator/resource_client_request.rb +3 -1
  23. data/lib/aws-sdk-code-generator/resource_waiter.rb +6 -5
  24. data/lib/aws-sdk-code-generator/service.rb +85 -16
  25. data/lib/aws-sdk-code-generator/views/async_client_class.rb +5 -1
  26. data/lib/aws-sdk-code-generator/views/client_api_module.rb +58 -16
  27. data/lib/aws-sdk-code-generator/views/client_class.rb +5 -1
  28. data/lib/aws-sdk-code-generator/views/endpoint_parameters_class.rb +6 -50
  29. data/lib/aws-sdk-code-generator/views/endpoint_provider_class.rb +9 -0
  30. data/lib/aws-sdk-code-generator/views/endpoints_module.rb +18 -124
  31. data/lib/aws-sdk-code-generator/views/endpoints_plugin.rb +46 -4
  32. data/lib/aws-sdk-code-generator/views/errors_module.rb +21 -0
  33. data/lib/aws-sdk-code-generator/views/event_streams_module.rb +7 -1
  34. data/lib/aws-sdk-code-generator/views/features/smoke.rb +100 -23
  35. data/lib/aws-sdk-code-generator/views/features/step_definitions.rb +1 -4
  36. data/lib/aws-sdk-code-generator/views/gemspec.rb +13 -3
  37. data/lib/aws-sdk-code-generator/views/rbs/client_class.rb +172 -0
  38. data/lib/aws-sdk-code-generator/views/rbs/errors_module.rb +28 -0
  39. data/lib/aws-sdk-code-generator/views/rbs/resource_class.rb +95 -0
  40. data/lib/aws-sdk-code-generator/views/rbs/root_resource_class.rb +30 -0
  41. data/lib/aws-sdk-code-generator/views/rbs/types_module.rb +257 -0
  42. data/lib/aws-sdk-code-generator/views/rbs/waiters_module.rb +22 -0
  43. data/lib/aws-sdk-code-generator/views/resource_class.rb +22 -0
  44. data/lib/aws-sdk-code-generator/views/root_resource_class.rb +19 -0
  45. data/lib/aws-sdk-code-generator/views/service_module.rb +41 -27
  46. data/lib/aws-sdk-code-generator/views/spec/endpoint_provider_spec_class.rb +25 -12
  47. data/lib/aws-sdk-code-generator/views/types_module.rb +34 -11
  48. data/lib/aws-sdk-code-generator.rb +29 -1
  49. data/templates/async_client_class.mustache +6 -1
  50. data/templates/client_api_module.mustache +14 -0
  51. data/templates/client_class.mustache +10 -47
  52. data/templates/endpoint_parameters_class.mustache +16 -13
  53. data/templates/endpoints_module.mustache +19 -11
  54. data/templates/endpoints_plugin.mustache +38 -20
  55. data/templates/errors_module.mustache +5 -0
  56. data/templates/features/smoke.mustache +11 -15
  57. data/templates/features/step_definitions.mustache +0 -5
  58. data/templates/gemspec.mustache +5 -2
  59. data/templates/rbs/client_class.mustache +39 -0
  60. data/templates/rbs/errors_module.mustache +17 -0
  61. data/templates/rbs/resource_class.mustache +71 -0
  62. data/templates/rbs/root_resource_class.mustache +26 -0
  63. data/templates/rbs/types_module.mustache +37 -0
  64. data/templates/rbs/waiters_module.mustache +17 -0
  65. data/templates/resource_class.mustache +8 -1
  66. data/templates/root_resource_class.mustache +5 -0
  67. data/templates/service_module.mustache +13 -3
  68. data/templates/spec/endpoint_provider_spec_class.mustache +11 -1
  69. data/templates/types_module.mustache +4 -0
  70. metadata +27 -7
  71. data/lib/aws-sdk-code-generator/views/features/smoke_step_definitions.rb +0 -26
  72. data/templates/features/smoke_step_definitions.mustache +0 -31
@@ -0,0 +1,257 @@
1
+ # frozen_string_literal: true
2
+
3
+ module AwsSdkCodeGenerator
4
+ module Views
5
+ module RBS
6
+ class TypesModule < View
7
+
8
+ include Helper
9
+
10
+ # @option options [required, Service] :service
11
+ def initialize(options)
12
+ @service = options.fetch(:service)
13
+ @api = @service.api
14
+ end
15
+
16
+ # @return [String|nil]
17
+ def generated_src_warning
18
+ return if @service.protocol == 'api-gateway'
19
+ GENERATED_SRC_WARNING
20
+ end
21
+
22
+ def module_name
23
+ @service.module_name
24
+ end
25
+
26
+ # @return [Array<StructClass>]
27
+ def structures
28
+ @service.api['shapes'].each do |_, shape|
29
+ if shape['eventstream']
30
+ # add internal exception_event ctrait to all exceptions
31
+ # exceptions will not have the event trait.
32
+ shape['members'].each do |name, ref|
33
+ if !!@service.api['shapes'][ref['shape']]['exception']
34
+ @service.api['shapes'][ref['shape']]['exceptionEvent'] = true
35
+ end
36
+ end
37
+ end
38
+ end
39
+ @service.api['shapes'].inject([]) do |list, (shape_name, shape)|
40
+ # APIG model can have input/output shape with downcase and '__'
41
+ if @service.protocol == 'api-gateway'
42
+ shape_name = lstrip_prefix(upcase_first(shape_name))
43
+ end
44
+ # eventstream shape will be inheriting from enumerator
45
+ if shape['eventstream']
46
+ list
47
+ elsif shape['type'] == 'structure' && !shape['document']
48
+ struct_members = struct_members(shape)
49
+ sensitive_params = struct_members.select(&:sensitive).map do |m|
50
+ m.member_name.to_sym
51
+ end
52
+ list << StructClass.new(
53
+ class_name: shape_name,
54
+ members: struct_members,
55
+ sensitive_params: sensitive_params,
56
+ documentation: struct_class_docs(shape_name, shape),
57
+ union: shape['union']
58
+ )
59
+ else
60
+ list
61
+ end
62
+ end
63
+ end
64
+
65
+ # return [Array<EventStreamClass>]
66
+ def eventstreams
67
+ @service.api['shapes'].inject([]) do |list, (shape_name, shape)|
68
+ if shape['eventstream']
69
+ list << EventStreamClass.new(
70
+ class_name: shape_name,
71
+ types: struct_members(shape),
72
+ documentation: eventstream_class_docs(shape_name, shape)
73
+ )
74
+ else
75
+ list
76
+ end
77
+ end
78
+ end
79
+
80
+ private
81
+
82
+ def struct_members(shape)
83
+ return if shape['members'].nil?
84
+ members = shape['members'].map do |member_name, member_ref|
85
+ sensitive = !!(member_ref['sensitive'] ||
86
+ @api['shapes'][member_ref['shape']]['sensitive'])
87
+ StructMember.new(
88
+ member_name: underscore(member_name),
89
+ sensitive: sensitive,
90
+ returns: AwsSdkCodeGenerator::RBS.to_type(member_ref, @api)
91
+ )
92
+ end
93
+ if shape['event'] || shape['exceptionEvent']
94
+ members << StructMember.new(
95
+ member_name: 'event_type',
96
+ returns: 'untyped'
97
+ )
98
+ end
99
+ members
100
+ end
101
+
102
+ def struct_class_docs(shape_name, shape)
103
+ nil
104
+ end
105
+
106
+ def eventstream_class_docs(shape_name, shape)
107
+ nil
108
+ end
109
+
110
+ def eventstream_docs(shape_name)
111
+ nil
112
+ end
113
+
114
+ def output_example_docs(shape_name, shape)
115
+ nil
116
+ end
117
+
118
+ def input_example_docs(shape_name, shape)
119
+ nil
120
+ end
121
+
122
+ def attribute_macros_docs(shape_name)
123
+ nil
124
+ end
125
+
126
+ def idempotency_token?(member_ref)
127
+ member_ref['idempotencyToken'] || shape(member_ref)['idempotencyToken']
128
+ end
129
+
130
+ def idempotency_token_msg
131
+ "<p><b>A suitable default value is auto-generated.</b> You should normally not need to pass this option.</p>"
132
+ end
133
+
134
+ def visit_shapes(shape_ref, shapes)
135
+ return if shapes.include?(shape_ref['shape']) # recursion
136
+ shapes << shape_ref['shape']
137
+ s = shape(shape_ref)
138
+ raise "cannot locate shape #{shape_ref['shape']}" if s.nil?
139
+ case s['type']
140
+ when 'structure'
141
+ return if s['members'].nil?
142
+ s['members'].each_pair do |_, member_ref|
143
+ visit_shapes(member_ref, shapes)
144
+ end
145
+ when 'list'
146
+ visit_shapes(s['member'], shapes)
147
+ when 'map'
148
+ visit_shapes(s['key'], shapes)
149
+ visit_shapes(s['value'], shapes)
150
+ end
151
+ end
152
+
153
+ def shape(shape_ref)
154
+ Api.resolve(shape_ref, @api)[1]
155
+ end
156
+
157
+ class EventStreamClass
158
+
159
+ def initialize(options)
160
+ @class_name = options.fetch(:class_name)
161
+ @types = options.fetch(:types)
162
+ @documentation = options.fetch(:documentation)
163
+ if @types.nil? || @types.empty?
164
+ @empty = true
165
+ else
166
+ @empty = false
167
+ @types.last.last = true
168
+ end
169
+ end
170
+
171
+ # @return [String]
172
+ attr_accessor :class_name
173
+
174
+ # @return [Array<StructMember>]
175
+ attr_accessor :types
176
+
177
+ # @return [String, nil]
178
+ attr_accessor :documentation
179
+
180
+ # @return [Boolean]
181
+ def empty?
182
+ @empty
183
+ end
184
+
185
+ end
186
+
187
+ class StructClass
188
+
189
+ def initialize(options)
190
+ @class_name = options.fetch(:class_name)
191
+ @members = options.fetch(:members)
192
+ @documentation = options.fetch(:documentation)
193
+ @sensitive_params = options.fetch(:sensitive_params)
194
+ @union = options.fetch(:union)
195
+ @members << StructMember.new(
196
+ member_name: :unknown,
197
+ returns: 'untyped' # FIXME
198
+ ) if @union
199
+ if @members.nil? || @members.empty?
200
+ @empty = true
201
+ else
202
+ @empty = false
203
+ @members.last.last = true
204
+ end
205
+ end
206
+
207
+ # @return [String]
208
+ attr_accessor :class_name
209
+
210
+ # @return [Array<StructMember>]
211
+ attr_accessor :members
212
+
213
+ # @return [String, nil]
214
+ attr_accessor :documentation
215
+
216
+ # @return [Array<Symbol>]
217
+ attr_accessor :sensitive_params
218
+
219
+ # @return [Boolean]
220
+ def union?
221
+ @union
222
+ end
223
+
224
+ # @return [Boolean]
225
+ def empty?
226
+ @empty
227
+ end
228
+ end
229
+
230
+ class StructMember
231
+ def initialize(member_name:, sensitive: false, returns:)
232
+ @member_name = member_name
233
+ @member_class_name = AwsSdkCodeGenerator::Helper::pascal_case(@member_name)
234
+ @sensitive = sensitive
235
+ @returns = returns
236
+ @last = false
237
+ end
238
+
239
+ # @return [String]
240
+ attr_accessor :member_name
241
+
242
+ # @return [Boolean]
243
+ attr_accessor :sensitive
244
+
245
+ # @return [String]
246
+ attr_accessor :member_class_name
247
+
248
+ # @return [String]
249
+ attr_accessor :returns
250
+
251
+ # @return [Boolean]
252
+ attr_accessor :last
253
+ end
254
+ end
255
+ end
256
+ end
257
+ end
@@ -0,0 +1,22 @@
1
+ # frozen_string_literal: true
2
+
3
+ module AwsSdkCodeGenerator
4
+ module Views
5
+ module RBS
6
+ class WaitersModule < View
7
+ attr_reader :service_name
8
+ attr_reader :waiters
9
+
10
+ def initialize(service_name:, api:, waiters:)
11
+ @service_name = service_name
12
+ @waiters = AwsSdkCodeGenerator::RBS::Waiter.build_list(api: api, waiters: waiters)
13
+ end
14
+
15
+ # @return [String|nil]
16
+ def generated_src_warning
17
+ GENERATED_SRC_WARNING
18
+ end
19
+ end
20
+ end
21
+ end
22
+ end
@@ -106,8 +106,30 @@ module AwsSdkCodeGenerator
106
106
  @identifiers.size > 0
107
107
  end
108
108
 
109
+ # @return [Boolean]
110
+ def customization_file_exists?
111
+ File.exist?(
112
+ File.join(
113
+ Helper.gem_lib_path(gem_name), "#{resource_customization}.rb"
114
+ )
115
+ )
116
+ end
117
+
118
+ # @return [String]
119
+ def resource_customization
120
+ "#{gem_name}/customizations/#{underscored_name}"
121
+ end
122
+
109
123
  private
110
124
 
125
+ def gem_name
126
+ "aws-sdk-#{module_name.split('::').last.downcase}"
127
+ end
128
+
129
+ def underscored_name
130
+ class_name.gsub(/([a-z])([A-Z])/, '\1_\2').downcase
131
+ end
132
+
111
133
  def build_associations(options)
112
134
  ResourceAssociation.build_list(
113
135
  class_name: options.fetch(:class_name),
@@ -53,6 +53,25 @@ module AwsSdkCodeGenerator
53
53
  actions? || associations?
54
54
  end
55
55
 
56
+ # @return [Boolean]
57
+ def customization_file_exists?
58
+ File.exist?(
59
+ File.join(
60
+ Helper.gem_lib_path(gem_name), "#{customization_file_path}.rb"
61
+ )
62
+ )
63
+ end
64
+
65
+ # @return [String]
66
+ def customization_file_path
67
+ "#{gem_name}/customizations/resource"
68
+ end
69
+
70
+ private
71
+
72
+ def gem_name
73
+ "aws-sdk-#{module_name.split('::').last.downcase}"
74
+ end
56
75
  end
57
76
  end
58
77
  end
@@ -11,9 +11,12 @@ module AwsSdkCodeGenerator
11
11
  def initialize(options)
12
12
  @service = options.fetch(:service)
13
13
  @prefix = options.fetch(:prefix)
14
- @codegenerated_plugins = options.fetch(:codegenerated_plugins)
14
+ @codegenerated_plugins = options.fetch(:codegenerated_plugins) || []
15
15
  end
16
16
 
17
+ # @return [String]
18
+ attr_reader :prefix
19
+
17
20
  # @return [String|nil]
18
21
  def generated_src_warning
19
22
  return if @service.protocol == 'api-gateway'
@@ -60,47 +63,57 @@ module AwsSdkCodeGenerator
60
63
  @service.included_in_core?
61
64
  end
62
65
 
63
- # @return [Array<String>]
64
- def relative_requires
65
- paths = Set.new
66
- paths << "#{@prefix}/types"
67
- paths << "#{@prefix}/client_api"
66
+ # @return [String]
67
+ def service_identifier
68
+ @service.identifier
69
+ end
70
+
71
+ # @return [Array<Hash>] list of autoload path hashes with :path, :class_name and
72
+ # :is_plugin keys.
73
+ def autoloads
74
+ paths = []
75
+ paths << auto_load("#{@prefix}/types", :Types)
76
+ paths << auto_load("#{@prefix}/client_api", :ClientApi)
68
77
 
69
78
  # these must be required before the client
70
- if @codegenerated_plugins
71
- paths += @codegenerated_plugins.map { | p| p.path }
79
+ paths += @codegenerated_plugins.map do |p|
80
+ auto_load(p.path, p.class_name.split('::').last, true)
72
81
  end
73
82
 
74
- paths << "#{@prefix}/client"
75
- paths << "#{@prefix}/errors"
76
- paths << "#{@prefix}/waiters" if @service.waiters
77
- paths << "#{@prefix}/resource"
83
+ paths << auto_load("#{@prefix}/client", :Client)
84
+ paths << auto_load("#{@prefix}/errors", :Errors)
85
+ paths << auto_load("#{@prefix}/waiters", :Waiters) if @service.waiters
86
+ paths << auto_load("#{@prefix}/resource", :Resource)
78
87
 
79
88
  unless @service.legacy_endpoints?
80
- paths << "#{@prefix}/endpoint_parameters"
81
- paths << "#{@prefix}/endpoint_provider"
82
- paths << "#{@prefix}/endpoints"
89
+ paths << auto_load("#{@prefix}/endpoint_parameters", :EndpointParameters)
90
+ paths << auto_load("#{@prefix}/endpoint_provider", :EndpointProvider)
91
+ paths << auto_load("#{@prefix}/endpoints", :Endpoints)
83
92
  end
84
93
 
85
94
  if @service.resources && @service.resources['resources']
86
95
  @service.resources['resources'].keys.each do |resource_name|
87
96
  path = "#{@prefix}/#{underscore(resource_name)}"
88
- if paths.include?(path)
89
- raise "resource path conflict for `#{resource_name}'"
90
- else
91
- paths << path
92
- end
97
+ paths << auto_load(path, resource_name)
93
98
  end
94
99
  end
95
- paths << "#{@prefix}/customizations"
96
100
  if @service.api['metadata']['protocolSettings'] &&
97
- @service.api['metadata']['protocolSettings']['h2'] == 'eventstream'
98
- paths << "#{@prefix}/async_client"
99
- paths << "#{@prefix}/event_streams"
101
+ @service.api['metadata']['protocolSettings']['h2'] == 'eventstream'
102
+ paths << auto_load("#{@prefix}/async_client", :AsyncClient)
103
+ paths << auto_load("#{@prefix}/event_streams", :EventStreams)
100
104
  elsif eventstream_shape?
101
- paths << "#{@prefix}/event_streams"
105
+ paths << auto_load("#{@prefix}/event_streams", :EventStreams)
102
106
  end
103
- paths.to_a
107
+
108
+ paths
109
+ end
110
+
111
+ def auto_load(path, class_name, is_plugin = false)
112
+ {
113
+ file_path: path,
114
+ class_name: class_name,
115
+ is_plugin: is_plugin
116
+ }
104
117
  end
105
118
 
106
119
  def example_var_name
@@ -108,7 +121,8 @@ module AwsSdkCodeGenerator
108
121
  end
109
122
 
110
123
  def example_operation_name
111
- raise "no operations found for the service" if @service.api['operations'].empty?
124
+ raise 'no operations found for the service' if @service.api['operations'].empty?
125
+
112
126
  underscore(@service.api['operations'].keys.first)
113
127
  end
114
128
 
@@ -51,9 +51,9 @@ module AwsSdkCodeGenerator
51
51
  operation_name: Underscore.underscore(
52
52
  operation_inputs_test['operationName']
53
53
  ),
54
- operation_params: operation_inputs_test['operationParams'] || [],
55
- built_in_params: operation_inputs_test['builtInParams'] || [],
56
- client_params: operation_inputs_test['clientParams'] || []
54
+ operation_params: operation_inputs_test['operationParams'] || {},
55
+ built_in_params: operation_inputs_test['builtInParams'] || {},
56
+ client_params: operation_inputs_test['clientParams'] || {}
57
57
  )
58
58
  end
59
59
  end
@@ -90,6 +90,10 @@ module AwsSdkCodeGenerator
90
90
  !@expect['endpoint']['properties']['authSchemes'].empty?
91
91
  end
92
92
 
93
+ def s3_express_auth?
94
+ expect_auth? && expected_auth['name'] == 'sigv4-s3express'
95
+ end
96
+
93
97
  def expected_headers
94
98
  @expect['endpoint']['headers'].map { |k,v| Param.new(k, v.join(",")) }
95
99
  end
@@ -113,12 +117,13 @@ module AwsSdkCodeGenerator
113
117
  @client_params = options[:client_params].map do |k,v|
114
118
  Param.new(Underscore.underscore(k), v)
115
119
  end
116
-
117
120
  @client_params += options[:built_in_params].map do |k,v|
118
121
  built_in_to_param(k, v)
119
122
  end
120
- # the expected default of UseGlobalEndpoint does not match the SDK's default value
121
- if @service.identifier == 's3' && !options[:built_in_params].include?('AWS::S3::UseGlobalEndpoint')
123
+ # the expected default of UseGlobalEndpoint in rules
124
+ # does not match the Ruby SDK's default value
125
+ if @service.identifier == 's3' &&
126
+ !options[:built_in_params].include?('AWS::S3::UseGlobalEndpoint')
122
127
  @client_params << built_in_to_param('AWS::S3::UseGlobalEndpoint', false)
123
128
  end
124
129
  end
@@ -137,7 +142,7 @@ module AwsSdkCodeGenerator
137
142
  case value
138
143
  when Hash
139
144
  value.each_with_object({}) do |(k, v), o|
140
- o[Underscore.underscore(k)] = transform_operation_values(v)
145
+ o[Underscore.underscore(k).to_sym] = transform_operation_values(v)
141
146
  end
142
147
  when Array
143
148
  value.map { |v| transform_operation_values(v) }
@@ -154,6 +159,14 @@ module AwsSdkCodeGenerator
154
159
  Param.new('use_fips_endpoint', value)
155
160
  when 'AWS::UseDualStack'
156
161
  Param.new('use_dualstack_endpoint', value)
162
+ when 'AWS::Auth::AccountId'
163
+ Param.new(
164
+ 'credentials',
165
+ "Aws::Credentials.new('stubbed-akid', 'stubbed-secret', account_id: '#{value}')",
166
+ true
167
+ )
168
+ when 'AWS::Auth::AccountIdEndpointMode'
169
+ Param.new('account_id_endpoint_mode', value)
157
170
  when 'AWS::STS::UseGlobalEndpoint'
158
171
  Param.new('sts_regional_endpoints', value ? 'legacy' : 'regional')
159
172
  when 'AWS::S3::UseGlobalEndpoint'
@@ -162,9 +175,7 @@ module AwsSdkCodeGenerator
162
175
  Param.new('use_accelerate_endpoint', value)
163
176
  when 'AWS::S3::ForcePathStyle'
164
177
  Param.new('force_path_style', value)
165
- when 'AWS::S3::UseArnRegion'
166
- Param.new('s3_use_arn_region', value)
167
- when 'AWS::S3Control::UseArnRegion'
178
+ when 'AWS::S3::UseArnRegion', 'AWS::S3Control::UseArnRegion'
168
179
  Param.new('s3_use_arn_region', value)
169
180
  when 'AWS::S3::DisableMultiRegionAccessPoints'
170
181
  Param.new('s3_disable_multiregion_access_points', value)
@@ -177,14 +188,16 @@ module AwsSdkCodeGenerator
177
188
  end
178
189
 
179
190
  class Param
180
- def initialize(param, value)
191
+ def initialize(param, value, literal = false)
181
192
  @param = param
182
193
  @value = value
194
+ @literal = literal
183
195
  end
196
+
184
197
  attr_accessor :param
185
198
 
186
199
  def value
187
- if @value.is_a? String
200
+ if @value.is_a?(String) && !@literal
188
201
  "'#{@value}'"
189
202
  else
190
203
  @value
@@ -28,14 +28,13 @@ module AwsSdkCodeGenerator
28
28
 
29
29
  # @return [Array<StructClass>]
30
30
  def structures
31
- unless @service.protocol_settings.empty?
32
- if @service.protocol_settings['h2'] == 'eventstream'
33
- @service.api['shapes'].each do |_, shape|
34
- if shape['eventstream']
35
- # add event trait to all members if not exists
36
- shape['members'].each do |name, ref|
37
- @service.api['shapes'][ref['shape']]['event'] = true
38
- end
31
+ @service.api['shapes'].each do |_, shape|
32
+ if shape['eventstream']
33
+ # add internal exception_event ctrait to all exceptions
34
+ # exceptions will not have the event trait.
35
+ shape['members'].each do |name, ref|
36
+ if !!@service.api['shapes'][ref['shape']]['exception']
37
+ @service.api['shapes'][ref['shape']]['exceptionEvent'] = true
39
38
  end
40
39
  end
41
40
  end
@@ -81,19 +80,43 @@ module AwsSdkCodeGenerator
81
80
  end
82
81
  end
83
82
 
83
+ # @return [Array<String>]
84
+ def types_customizations
85
+ Dir.glob(File.join(Helper.gem_lib_path(gem_name), "#{gem_name}/customizations/types", '*.rb')).map do |file|
86
+ filename = File.basename(file, '.rb')
87
+ "#{gem_name}/customizations/types/#{filename}"
88
+ end
89
+ end
90
+
84
91
  private
85
92
 
93
+ def gem_name
94
+ "aws-sdk-#{module_name.split('::').last.downcase}"
95
+ end
96
+
86
97
  def struct_members(shape)
87
98
  return if shape['members'].nil?
88
99
  members = shape['members'].map do |member_name, member_ref|
100
+ member_target = @api['shapes'][member_ref['shape']]
89
101
  sensitive = !!(member_ref['sensitive'] ||
90
- @api['shapes'][member_ref['shape']]['sensitive'])
102
+ member_target['sensitive'])
103
+
104
+ case member_target["type"]
105
+ when 'map'
106
+ key_shape = @api['shapes'][member_target['key']['shape']]
107
+ value_shape = @api['shapes'][member_target['value']['shape']]
108
+ sensitive ||= !!(key_shape['sensitive'] || value_shape['sensitive'])
109
+ when 'list'
110
+ list_member = @api['shapes'][member_target['member']['shape']]
111
+ sensitive ||= !!(list_member['sensitive'])
112
+ end
113
+
91
114
  StructMember.new(
92
115
  member_name: underscore(member_name),
93
116
  sensitive: sensitive
94
117
  )
95
118
  end
96
- if shape['event']
119
+ if shape['event'] || shape['exceptionEvent']
97
120
  members << StructMember.new(member_name: 'event_type')
98
121
  end
99
122
  members
@@ -181,7 +204,7 @@ module AwsSdkCodeGenerator
181
204
 
182
205
  def see_also_tag(shape_name)
183
206
  uid = @api['metadata']['uid']
184
- if @api['metadata']['protocol'] != 'api-gateway' && Crosslink.taggable?(uid)
207
+ if @service.protocol != 'api-gateway' && Crosslink.taggable?(uid)
185
208
  Crosslink.tag_string(uid, shape_name)
186
209
  end
187
210
  end
@@ -1,5 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require 'aws-sdk-core'
4
+
3
5
  require_relative 'aws-sdk-code-generator/api'
4
6
  require_relative 'aws-sdk-code-generator/apply_docs'
5
7
  require_relative 'aws-sdk-code-generator/codegenerated_plugin'
@@ -10,6 +12,7 @@ require_relative 'aws-sdk-code-generator/error_list'
10
12
  require_relative 'aws-sdk-code-generator/client_response_structure_example'
11
13
  require_relative 'aws-sdk-code-generator/crosslink'
12
14
  require_relative 'aws-sdk-code-generator/docstring'
15
+ require_relative 'aws-sdk-code-generator/endpoint_parameter'
13
16
  require_relative 'aws-sdk-code-generator/hash_formatter'
14
17
  require_relative 'aws-sdk-code-generator/helper'
15
18
  require_relative 'aws-sdk-code-generator/plugin_list'
@@ -50,7 +53,6 @@ require_relative 'aws-sdk-code-generator/views/docstring'
50
53
  require_relative 'aws-sdk-code-generator/views/errors_module'
51
54
  require_relative 'aws-sdk-code-generator/views/features/env'
52
55
  require_relative 'aws-sdk-code-generator/views/features/step_definitions'
53
- require_relative 'aws-sdk-code-generator/views/features/smoke_step_definitions'
54
56
  require_relative 'aws-sdk-code-generator/views/features/smoke'
55
57
  require_relative 'aws-sdk-code-generator/views/gemspec'
56
58
  require_relative 'aws-sdk-code-generator/views/resource_class'
@@ -76,6 +78,23 @@ require_relative 'aws-sdk-code-generator/yard_option_tag'
76
78
  require_relative 'aws-sdk-code-generator/code_builder'
77
79
  require_relative 'aws-sdk-code-generator/gem_builder'
78
80
 
81
+ # RBS
82
+ require_relative 'aws-sdk-code-generator/rbs'
83
+ require_relative 'aws-sdk-code-generator/rbs/error_list'
84
+ require_relative 'aws-sdk-code-generator/rbs/method_signature'
85
+ require_relative 'aws-sdk-code-generator/rbs/keyword_argument_builder'
86
+ require_relative 'aws-sdk-code-generator/rbs/resource_action'
87
+ require_relative 'aws-sdk-code-generator/rbs/resource_association'
88
+ require_relative 'aws-sdk-code-generator/rbs/resource_batch_action'
89
+ require_relative 'aws-sdk-code-generator/rbs/resource_client_request'
90
+ require_relative 'aws-sdk-code-generator/rbs/waiter'
91
+ require_relative 'aws-sdk-code-generator/views/rbs/client_class'
92
+ require_relative 'aws-sdk-code-generator/views/rbs/errors_module'
93
+ require_relative 'aws-sdk-code-generator/views/rbs/resource_class'
94
+ require_relative 'aws-sdk-code-generator/views/rbs/root_resource_class'
95
+ require_relative 'aws-sdk-code-generator/views/rbs/types_module'
96
+ require_relative 'aws-sdk-code-generator/views/rbs/waiters_module'
97
+
79
98
  module AwsSdkCodeGenerator
80
99
 
81
100
  GENERATED_SRC_WARNING = <<-WARNING_TXT
@@ -87,4 +106,13 @@ module AwsSdkCodeGenerator
87
106
  # WARNING ABOUT GENERATED CODE
88
107
  WARNING_TXT
89
108
 
109
+ @warnings = []
110
+
111
+ class << self
112
+ attr_reader :warnings
113
+ def warn(service, type, message)
114
+ Kernel.warn(message)
115
+ @warnings << { service: service, type: type, message: message }
116
+ end
117
+ end
90
118
  end