speakeasy_client_sdk_ruby 1.0.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (65) hide show
  1. checksums.yaml +7 -0
  2. data/lib/sdk/apiendpoints.rb +338 -0
  3. data/lib/sdk/apis.rb +264 -0
  4. data/lib/sdk/embeds.rb +128 -0
  5. data/lib/sdk/metadata.rb +144 -0
  6. data/lib/sdk/models/operations/deleteapi.rb +52 -0
  7. data/lib/sdk/models/operations/deleteapiendpoint.rb +55 -0
  8. data/lib/sdk/models/operations/deleteschema.rb +55 -0
  9. data/lib/sdk/models/operations/deleteversionmetadata.rb +58 -0
  10. data/lib/sdk/models/operations/downloadschema.rb +55 -0
  11. data/lib/sdk/models/operations/downloadschemarevision.rb +58 -0
  12. data/lib/sdk/models/operations/findapiendpoint.rb +59 -0
  13. data/lib/sdk/models/operations/generateopenapispec.rb +56 -0
  14. data/lib/sdk/models/operations/generateopenapispecforapiendpoint.rb +59 -0
  15. data/lib/sdk/models/operations/generatepostmancollection.rb +55 -0
  16. data/lib/sdk/models/operations/generatepostmancollectionforapiendpoint.rb +58 -0
  17. data/lib/sdk/models/operations/generaterequestpostmancollection.rb +52 -0
  18. data/lib/sdk/models/operations/getallapiendpoints.rb +52 -0
  19. data/lib/sdk/models/operations/getallapiversions.rb +72 -0
  20. data/lib/sdk/models/operations/getallforversionapiendpoints.rb +55 -0
  21. data/lib/sdk/models/operations/getapiendpoint.rb +59 -0
  22. data/lib/sdk/models/operations/getapis.rb +69 -0
  23. data/lib/sdk/models/operations/getembedaccesstoken.rb +60 -0
  24. data/lib/sdk/models/operations/getplugins.rb +38 -0
  25. data/lib/sdk/models/operations/getrequestfromeventlog.rb +53 -0
  26. data/lib/sdk/models/operations/getschema.rb +56 -0
  27. data/lib/sdk/models/operations/getschemadiff.rb +62 -0
  28. data/lib/sdk/models/operations/getschemarevision.rb +59 -0
  29. data/lib/sdk/models/operations/getschemas.rb +55 -0
  30. data/lib/sdk/models/operations/getvalidembedaccesstokens.rb +38 -0
  31. data/lib/sdk/models/operations/getversionmetadata.rb +55 -0
  32. data/lib/sdk/models/operations/insertversionmetadata.rb +60 -0
  33. data/lib/sdk/models/operations/queryeventlog.rb +53 -0
  34. data/lib/sdk/models/operations/registerschema.rb +86 -0
  35. data/lib/sdk/models/operations/revokeembedaccesstoken.rb +49 -0
  36. data/lib/sdk/models/operations/runplugin.rb +56 -0
  37. data/lib/sdk/models/operations/upsertapi.rb +57 -0
  38. data/lib/sdk/models/operations/upsertapiendpoint.rb +63 -0
  39. data/lib/sdk/models/operations/upsertplugin.rb +39 -0
  40. data/lib/sdk/models/operations/validateapikey.rb +35 -0
  41. data/lib/sdk/models/shared/api.rb +69 -0
  42. data/lib/sdk/models/shared/apiendpoint.rb +84 -0
  43. data/lib/sdk/models/shared/boundedrequest.rb +64 -0
  44. data/lib/sdk/models/shared/embedaccesstokenresponse.rb +25 -0
  45. data/lib/sdk/models/shared/embedtoken.rb +52 -0
  46. data/lib/sdk/models/shared/error.rb +28 -0
  47. data/lib/sdk/models/shared/filter.rb +31 -0
  48. data/lib/sdk/models/shared/filters.rb +34 -0
  49. data/lib/sdk/models/shared/generateopenapispecdiff.rb +28 -0
  50. data/lib/sdk/models/shared/plugin.rb +43 -0
  51. data/lib/sdk/models/shared/requestmetadata.rb +28 -0
  52. data/lib/sdk/models/shared/schema.rb +40 -0
  53. data/lib/sdk/models/shared/schemadiff.rb +48 -0
  54. data/lib/sdk/models/shared/security.rb +25 -0
  55. data/lib/sdk/models/shared/unboundedrequest.rb +37 -0
  56. data/lib/sdk/models/shared/versionmetadata.rb +57 -0
  57. data/lib/sdk/plugins.rb +140 -0
  58. data/lib/sdk/requests.rb +136 -0
  59. data/lib/sdk/schemas.rb +334 -0
  60. data/lib/sdk/sdk.rb +173 -0
  61. data/lib/sdk/utils/metadata_fields.rb +154 -0
  62. data/lib/sdk/utils/retries.rb +130 -0
  63. data/lib/sdk/utils/utils.rb +769 -0
  64. data/lib/speakeasy_client_sdk_ruby.rb +70 -0
  65. metadata +206 -0
@@ -0,0 +1,334 @@
1
+ # Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
2
+
3
+ # typed: true
4
+ # frozen_string_literal: true
5
+
6
+ require 'faraday'
7
+ require 'faraday/multipart'
8
+ require 'sorbet-runtime'
9
+
10
+ module SpeakeasyClientSDK
11
+ extend T::Sig
12
+ class Schemas
13
+ extend T::Sig
14
+ sig { params(sdk: SpeakeasyClientSDK::SDK, client: Faraday::Connection, server_url: String, language: String, sdk_version: String, gen_version: String).void }
15
+ def initialize(sdk, client, server_url, language, sdk_version, gen_version)
16
+ @sdk = sdk
17
+ @client = client
18
+ @server_url = server_url
19
+ @language = language
20
+ @sdk_version = sdk_version
21
+ @gen_version = gen_version
22
+ end
23
+
24
+ sig { params(request: Operations::DeleteSchemaRequest).returns(Utils::FieldAugmented) }
25
+ def delete_schema(request)
26
+ # delete_schema - Delete a particular schema revision for an Api.
27
+ base_url = @server_url
28
+ url = Utils.generate_url(
29
+ Operations::DeleteSchemaRequest,
30
+ base_url,
31
+ '/v1/apis/{apiID}/version/{versionID}/schema/{revisionID}',
32
+ request
33
+ )
34
+ headers = {}
35
+ headers['Accept'] = 'application/json'
36
+ headers['user-agent'] = "speakeasy-sdk/#{@language} #{@sdk_version} #{@gen_version}"
37
+
38
+ r = @client.delete(url) do |req|
39
+ req.headers = headers
40
+ Utils.configure_request_security(req, @sdk.security) if !@sdk.nil? && !@sdk.security.nil?
41
+ end
42
+
43
+ content_type = r.headers.fetch('Content-Type', 'application/octet-stream')
44
+
45
+ res = Operations::DeleteSchemaResponse.new(
46
+ status_code: r.status, content_type: content_type, raw_response: r
47
+ )
48
+ if r.status == 200
49
+ else
50
+ if Utils.match_content_type(content_type, 'application/json')
51
+ out = Utils.unmarshal_complex(r.env.response_body, Shared::Error)
52
+ res.error = out
53
+ end
54
+ end
55
+ res
56
+ end
57
+
58
+ sig { params(request: Operations::DownloadSchemaRequest).returns(Utils::FieldAugmented) }
59
+ def download_schema(request)
60
+ # download_schema - Download the latest schema for a particular apiID.
61
+ base_url = @server_url
62
+ url = Utils.generate_url(
63
+ Operations::DownloadSchemaRequest,
64
+ base_url,
65
+ '/v1/apis/{apiID}/version/{versionID}/schema/download',
66
+ request
67
+ )
68
+ headers = {}
69
+ headers['Accept'] = 'application/json;q=1, application/json;q=0.7, application/x-yaml;q=0'
70
+ headers['user-agent'] = "speakeasy-sdk/#{@language} #{@sdk_version} #{@gen_version}"
71
+
72
+ r = @client.get(url) do |req|
73
+ req.headers = headers
74
+ Utils.configure_request_security(req, @sdk.security) if !@sdk.nil? && !@sdk.security.nil?
75
+ end
76
+
77
+ content_type = r.headers.fetch('Content-Type', 'application/octet-stream')
78
+
79
+ res = Operations::DownloadSchemaResponse.new(
80
+ status_code: r.status, content_type: content_type, raw_response: r
81
+ )
82
+ if r.status == 200
83
+ res.schema = r.env.response_body if Utils.match_content_type(content_type, 'application/json')
84
+ res.schema = r.env.response_body if Utils.match_content_type(content_type, 'application/x-yaml')
85
+ else
86
+ if Utils.match_content_type(content_type, 'application/json')
87
+ out = Utils.unmarshal_complex(r.env.response_body, Shared::Error)
88
+ res.error = out
89
+ end
90
+ end
91
+ res
92
+ end
93
+
94
+ sig { params(request: Operations::DownloadSchemaRevisionRequest).returns(Utils::FieldAugmented) }
95
+ def download_schema_revision(request)
96
+ # download_schema_revision - Download a particular schema revision for an Api.
97
+ base_url = @server_url
98
+ url = Utils.generate_url(
99
+ Operations::DownloadSchemaRevisionRequest,
100
+ base_url,
101
+ '/v1/apis/{apiID}/version/{versionID}/schema/{revisionID}/download',
102
+ request
103
+ )
104
+ headers = {}
105
+ headers['Accept'] = 'application/json;q=1, application/json;q=0.7, application/x-yaml;q=0'
106
+ headers['user-agent'] = "speakeasy-sdk/#{@language} #{@sdk_version} #{@gen_version}"
107
+
108
+ r = @client.get(url) do |req|
109
+ req.headers = headers
110
+ Utils.configure_request_security(req, @sdk.security) if !@sdk.nil? && !@sdk.security.nil?
111
+ end
112
+
113
+ content_type = r.headers.fetch('Content-Type', 'application/octet-stream')
114
+
115
+ res = Operations::DownloadSchemaRevisionResponse.new(
116
+ status_code: r.status, content_type: content_type, raw_response: r
117
+ )
118
+ if r.status == 200
119
+ res.schema = r.env.response_body if Utils.match_content_type(content_type, 'application/json')
120
+ res.schema = r.env.response_body if Utils.match_content_type(content_type, 'application/x-yaml')
121
+ else
122
+ if Utils.match_content_type(content_type, 'application/json')
123
+ out = Utils.unmarshal_complex(r.env.response_body, Shared::Error)
124
+ res.error = out
125
+ end
126
+ end
127
+ res
128
+ end
129
+
130
+ sig { params(request: Operations::GetSchemaRequest).returns(Utils::FieldAugmented) }
131
+ def get_schema(request)
132
+ # get_schema - Get information about the latest schema.
133
+ # Returns information about the last uploaded schema for a particular API version.
134
+ # This won't include the schema itself, that can be retrieved via the downloadSchema operation.
135
+ base_url = @server_url
136
+ url = Utils.generate_url(
137
+ Operations::GetSchemaRequest,
138
+ base_url,
139
+ '/v1/apis/{apiID}/version/{versionID}/schema',
140
+ request
141
+ )
142
+ headers = {}
143
+ headers['Accept'] = 'application/json;q=1, application/json;q=0'
144
+ headers['user-agent'] = "speakeasy-sdk/#{@language} #{@sdk_version} #{@gen_version}"
145
+
146
+ r = @client.get(url) do |req|
147
+ req.headers = headers
148
+ Utils.configure_request_security(req, @sdk.security) if !@sdk.nil? && !@sdk.security.nil?
149
+ end
150
+
151
+ content_type = r.headers.fetch('Content-Type', 'application/octet-stream')
152
+
153
+ res = Operations::GetSchemaResponse.new(
154
+ status_code: r.status, content_type: content_type, raw_response: r
155
+ )
156
+ if r.status == 200
157
+ if Utils.match_content_type(content_type, 'application/json')
158
+ out = Utils.unmarshal_complex(r.env.response_body, Shared::Schema)
159
+ res.schema = out
160
+ end
161
+ else
162
+ if Utils.match_content_type(content_type, 'application/json')
163
+ out = Utils.unmarshal_complex(r.env.response_body, Shared::Error)
164
+ res.error = out
165
+ end
166
+ end
167
+ res
168
+ end
169
+
170
+ sig { params(request: Operations::GetSchemaDiffRequest).returns(Utils::FieldAugmented) }
171
+ def get_schema_diff(request)
172
+ # get_schema_diff - Get a diff of two schema revisions for an Api.
173
+ base_url = @server_url
174
+ url = Utils.generate_url(
175
+ Operations::GetSchemaDiffRequest,
176
+ base_url,
177
+ '/v1/apis/{apiID}/version/{versionID}/schema/{baseRevisionID}/diff/{targetRevisionID}',
178
+ request
179
+ )
180
+ headers = {}
181
+ headers['Accept'] = 'application/json;q=1, application/json;q=0'
182
+ headers['user-agent'] = "speakeasy-sdk/#{@language} #{@sdk_version} #{@gen_version}"
183
+
184
+ r = @client.get(url) do |req|
185
+ req.headers = headers
186
+ Utils.configure_request_security(req, @sdk.security) if !@sdk.nil? && !@sdk.security.nil?
187
+ end
188
+
189
+ content_type = r.headers.fetch('Content-Type', 'application/octet-stream')
190
+
191
+ res = Operations::GetSchemaDiffResponse.new(
192
+ status_code: r.status, content_type: content_type, raw_response: r
193
+ )
194
+ if r.status == 200
195
+ if Utils.match_content_type(content_type, 'application/json')
196
+ out = Utils.unmarshal_complex(r.env.response_body, Shared::SchemaDiff)
197
+ res.schema_diff = out
198
+ end
199
+ else
200
+ if Utils.match_content_type(content_type, 'application/json')
201
+ out = Utils.unmarshal_complex(r.env.response_body, Shared::Error)
202
+ res.error = out
203
+ end
204
+ end
205
+ res
206
+ end
207
+
208
+ sig { params(request: Operations::GetSchemaRevisionRequest).returns(Utils::FieldAugmented) }
209
+ def get_schema_revision(request)
210
+ # get_schema_revision - Get information about a particular schema revision for an Api.
211
+ # Returns information about the last uploaded schema for a particular schema revision.
212
+ # This won't include the schema itself, that can be retrieved via the downloadSchema operation.
213
+ base_url = @server_url
214
+ url = Utils.generate_url(
215
+ Operations::GetSchemaRevisionRequest,
216
+ base_url,
217
+ '/v1/apis/{apiID}/version/{versionID}/schema/{revisionID}',
218
+ request
219
+ )
220
+ headers = {}
221
+ headers['Accept'] = 'application/json;q=1, application/json;q=0'
222
+ headers['user-agent'] = "speakeasy-sdk/#{@language} #{@sdk_version} #{@gen_version}"
223
+
224
+ r = @client.get(url) do |req|
225
+ req.headers = headers
226
+ Utils.configure_request_security(req, @sdk.security) if !@sdk.nil? && !@sdk.security.nil?
227
+ end
228
+
229
+ content_type = r.headers.fetch('Content-Type', 'application/octet-stream')
230
+
231
+ res = Operations::GetSchemaRevisionResponse.new(
232
+ status_code: r.status, content_type: content_type, raw_response: r
233
+ )
234
+ if r.status == 200
235
+ if Utils.match_content_type(content_type, 'application/json')
236
+ out = Utils.unmarshal_complex(r.env.response_body, Shared::Schema)
237
+ res.schema = out
238
+ end
239
+ else
240
+ if Utils.match_content_type(content_type, 'application/json')
241
+ out = Utils.unmarshal_complex(r.env.response_body, Shared::Error)
242
+ res.error = out
243
+ end
244
+ end
245
+ res
246
+ end
247
+
248
+ sig { params(request: Operations::GetSchemasRequest).returns(Utils::FieldAugmented) }
249
+ def get_schemas(request)
250
+ # get_schemas - Get information about all schemas associated with a particular apiID.
251
+ # Returns information the schemas associated with a particular apiID.
252
+ # This won't include the schemas themselves, they can be retrieved via the downloadSchema operation.
253
+ base_url = @server_url
254
+ url = Utils.generate_url(
255
+ Operations::GetSchemasRequest,
256
+ base_url,
257
+ '/v1/apis/{apiID}/version/{versionID}/schemas',
258
+ request
259
+ )
260
+ headers = {}
261
+ headers['Accept'] = 'application/json;q=1, application/json;q=0'
262
+ headers['user-agent'] = "speakeasy-sdk/#{@language} #{@sdk_version} #{@gen_version}"
263
+
264
+ r = @client.get(url) do |req|
265
+ req.headers = headers
266
+ Utils.configure_request_security(req, @sdk.security) if !@sdk.nil? && !@sdk.security.nil?
267
+ end
268
+
269
+ content_type = r.headers.fetch('Content-Type', 'application/octet-stream')
270
+
271
+ res = Operations::GetSchemasResponse.new(
272
+ status_code: r.status, content_type: content_type, raw_response: r
273
+ )
274
+ if r.status == 200
275
+ if Utils.match_content_type(content_type, 'application/json')
276
+ out = Utils.unmarshal_complex(r.env.response_body, T::Array[Shared::Schema])
277
+ res.schemata = out
278
+ end
279
+ else
280
+ if Utils.match_content_type(content_type, 'application/json')
281
+ out = Utils.unmarshal_complex(r.env.response_body, Shared::Error)
282
+ res.error = out
283
+ end
284
+ end
285
+ res
286
+ end
287
+
288
+ sig { params(request: Operations::RegisterSchemaRequest).returns(Utils::FieldAugmented) }
289
+ def register_schema(request)
290
+ # register_schema - Register a schema.
291
+ # Allows uploading a schema for a particular API version.
292
+ # This will be used to populate ApiEndpoints and used as a base for any schema generation if present.
293
+ base_url = @server_url
294
+ url = Utils.generate_url(
295
+ Operations::RegisterSchemaRequest,
296
+ base_url,
297
+ '/v1/apis/{apiID}/version/{versionID}/schema',
298
+ request
299
+ )
300
+ headers = {}
301
+ req_content_type, data, form = Utils.serialize_request_body(request, :request_body, :multipart)
302
+ headers['content-type'] = req_content_type
303
+ raise StandardError, 'request body is required' if data.nil? && form.nil?
304
+ headers['Accept'] = 'application/json'
305
+ headers['user-agent'] = "speakeasy-sdk/#{@language} #{@sdk_version} #{@gen_version}"
306
+
307
+ r = @client.post(url) do |req|
308
+ req.headers = headers
309
+ Utils.configure_request_security(req, @sdk.security) if !@sdk.nil? && !@sdk.security.nil?
310
+ if form
311
+ req.body = Utils.encode_form(form)
312
+ elsif Utils.match_content_type(req_content_type, 'application/x-www-form-urlencoded')
313
+ req.body = URI.encode_www_form(data)
314
+ else
315
+ req.body = data
316
+ end
317
+ end
318
+
319
+ content_type = r.headers.fetch('Content-Type', 'application/octet-stream')
320
+
321
+ res = Operations::RegisterSchemaResponse.new(
322
+ status_code: r.status, content_type: content_type, raw_response: r
323
+ )
324
+ if r.status == 200
325
+ else
326
+ if Utils.match_content_type(content_type, 'application/json')
327
+ out = Utils.unmarshal_complex(r.env.response_body, Shared::Error)
328
+ res.error = out
329
+ end
330
+ end
331
+ res
332
+ end
333
+ end
334
+ end
data/lib/sdk/sdk.rb ADDED
@@ -0,0 +1,173 @@
1
+ # Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
2
+
3
+ # typed: true
4
+ # frozen_string_literal: true
5
+
6
+ require 'faraday'
7
+ require 'faraday/multipart'
8
+ require 'sorbet-runtime'
9
+ module SpeakeasyClientSDK
10
+ extend T::Sig
11
+ SERVER_PROD = 'prod'
12
+ SERVERS = {
13
+ SERVER_PROD: 'https://api.prod.speakeasyapi.dev'
14
+ }.freeze
15
+ class SDK
16
+ extend T::Sig
17
+
18
+ attr_accessor :api_endpoints, :apis, :embeds, :metadata, :plugins, :requests, :schemas
19
+
20
+ attr_accessor :security, :language, :sdk_version, :gen_version
21
+
22
+ sig do
23
+ params(security: Shared::Security,
24
+ server: String,
25
+ server_url: String,
26
+ url_params: T::Hash[Symbol, String],
27
+ client: Faraday::Request).void
28
+ end
29
+ def initialize(security: nil,
30
+ server: nil,
31
+ server_url: nil,
32
+ url_params: nil,
33
+ client: nil)
34
+
35
+ ## Instantiates the SDK configuring it with the provided parameters.
36
+ # @param [Shared::Security] security The security details required for authentication
37
+ # @param [String] server The server by name to use for all operations
38
+ # @param [String] server_url The server URL to use for all operations
39
+ # @param [Hash<Symbol, String>] url_params Parameters to optionally template the server URL with
40
+ # @param [Faraday::Request] client The faraday HTTP client to use for all operations
41
+
42
+ @client = Faraday.new(request: {
43
+ params_encoder: Faraday::FlatParamsEncoder
44
+ }) do |f|
45
+ f.request :multipart, {}
46
+ # f.response :logger
47
+ end
48
+
49
+
50
+
51
+
52
+ @security = nil
53
+ @server_url = SERVERS[SERVER_PROD]
54
+ @language = 'ruby'
55
+ @sdk_version = '1.0.1'
56
+ @gen_version = '2.35.9'
57
+ init_sdks
58
+ end
59
+
60
+ sig { params(server_url: String, params: T.nilable(T::Hash[Symbol, String])).void }
61
+ def config_server_url(server_url, params)
62
+ if params.nil?
63
+ @server_url = server_url
64
+ else
65
+ @server_url = Utils.template_url(server_url, params)
66
+ end
67
+ init_sdks
68
+ end
69
+
70
+ sig { params(server: String, params: T.nilable(T::Hash[Symbol, String])).void }
71
+ def config_server(server, params)
72
+ raise StandardError, 'Invalid server' if !SERVERS.include? server
73
+
74
+ config_server_url(SERVERS[server], params)
75
+ init_sdks
76
+ end
77
+
78
+ sig { params(security: Shared::Security).void }
79
+ def config_security(security)
80
+ @security = security
81
+ end
82
+
83
+ sig { void }
84
+ def init_sdks
85
+ @api_endpoints = ApiEndpoints.new(
86
+ self,
87
+ @client,
88
+ @server_url,
89
+ @language,
90
+ @sdk_version,
91
+ @gen_version
92
+ )
93
+ @apis = Apis.new(
94
+ self,
95
+ @client,
96
+ @server_url,
97
+ @language,
98
+ @sdk_version,
99
+ @gen_version
100
+ )
101
+ @embeds = Embeds.new(
102
+ self,
103
+ @client,
104
+ @server_url,
105
+ @language,
106
+ @sdk_version,
107
+ @gen_version
108
+ )
109
+ @metadata = Metadata.new(
110
+ self,
111
+ @client,
112
+ @server_url,
113
+ @language,
114
+ @sdk_version,
115
+ @gen_version
116
+ )
117
+ @plugins = Plugins.new(
118
+ self,
119
+ @client,
120
+ @server_url,
121
+ @language,
122
+ @sdk_version,
123
+ @gen_version
124
+ )
125
+ @requests = Requests.new(
126
+ self,
127
+ @client,
128
+ @server_url,
129
+ @language,
130
+ @sdk_version,
131
+ @gen_version
132
+ )
133
+ @schemas = Schemas.new(
134
+ self,
135
+ @client,
136
+ @server_url,
137
+ @language,
138
+ @sdk_version,
139
+ @gen_version
140
+ )
141
+ end
142
+
143
+
144
+ sig { returns(Utils::FieldAugmented) }
145
+ def validate_api_key
146
+ # validate_api_key - Validate the current api key.
147
+ base_url = @server_url
148
+ url = "#{base_url.delete_suffix('/')}/v1/auth/validate"
149
+ headers = {}
150
+ headers['Accept'] = 'application/json'
151
+ headers['user-agent'] = "speakeasy-sdk/#{@language} #{@sdk_version} #{@gen_version}"
152
+
153
+ r = @client.get(url) do |req|
154
+ req.headers = headers
155
+ Utils.configure_request_security(req, @sdk.security) if !@sdk.nil? && !@sdk.security.nil?
156
+ end
157
+
158
+ content_type = r.headers.fetch('Content-Type', 'application/octet-stream')
159
+
160
+ res = Operations::ValidateApiKeyResponse.new(
161
+ status_code: r.status, content_type: content_type, raw_response: r
162
+ )
163
+ if r.status == 200
164
+ else
165
+ if Utils.match_content_type(content_type, 'application/json')
166
+ out = Utils.unmarshal_complex(r.env.response_body, Shared::Error)
167
+ res.error = out
168
+ end
169
+ end
170
+ res
171
+ end
172
+ end
173
+ end
@@ -0,0 +1,154 @@
1
+ # Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
2
+
3
+ # typed: true
4
+ # frozen_string_literal: true
5
+
6
+ module SpeakeasyClientSDK
7
+ module MetadataFields
8
+ extend T::Sig
9
+
10
+ class Field
11
+ attr_accessor :name, :type, :metadata
12
+
13
+ def initialize(name, type, metadata)
14
+ @name = name
15
+ @type = type
16
+ @metadata = metadata
17
+ end
18
+ end
19
+
20
+ module ClassMethods
21
+ extend T::Sig
22
+
23
+ def fields
24
+ @__fields__ = [] if @__fields__.nil?
25
+
26
+ @__fields__
27
+ end
28
+
29
+ def field(field_name, type, metadata = {})
30
+ attr_accessor field_name
31
+
32
+ fields << Field.new(field_name, type, metadata)
33
+ end
34
+
35
+ def unmarshal_single(field_type, value, decoder = nil)
36
+ if field_type.respond_to? :unmarshal_json
37
+ unmarshalled = field_type.unmarshal_json(value)
38
+ return unmarshalled
39
+ elsif field_type.to_s == 'Object'
40
+ # rubocop:disable Lint/SuppressedException
41
+ begin
42
+ value = JSON.parse(value)
43
+ rescue TypeError, JSON::ParserError
44
+ end
45
+ # rubocop:enable Lint/SuppressedException
46
+ return value
47
+ end
48
+ if decoder.nil?
49
+ value
50
+ else
51
+ decoder.call(value)
52
+ end
53
+ end
54
+
55
+ sig { params(json_obj: T.any(String, T::Hash[Symbol, String])).returns(Utils::FieldAugmented) }
56
+ def unmarshal_json(json_obj)
57
+ to_build = new
58
+ begin
59
+ d = JSON.parse(json_obj)
60
+ rescue TypeError, JSON::ParserError
61
+ d = json_obj
62
+ end
63
+ fields.each do |field|
64
+ field_type = field.type
65
+ if field.type.respond_to?(:types) && field.type.types.length == 2
66
+ type2 = field.type.types[1]
67
+ if type2.raw_type == NilClass
68
+ field_type = field.type.types[0]
69
+ field_type = field_type.raw_type if field_type.respond_to? :raw_type
70
+ end
71
+ end
72
+
73
+
74
+ key = "#{field.name}="
75
+ lookup = field.metadata.fetch(:format_json, {}).fetch(:letter_case, nil).call
76
+ value = d[lookup]
77
+ next if value.nil?
78
+
79
+ if field_type.to_s.start_with? 'T::Array'
80
+ inner_type = field_type.type.raw_type
81
+ unmarshalled_array = value.map { |f| unmarshal_single(inner_type, f) }
82
+ to_build.send(key, unmarshalled_array)
83
+ elsif field_type.to_s.start_with? 'T::Hash'
84
+ _, val_type = field_type.type.types
85
+ # rubocop:disable Style/HashTransformValues
86
+ unmarshalled_hash = value.map { |k, v| [k, unmarshal_single(val_type.raw_type, v)] }.to_h
87
+ # rubocop:enable Style/HashTransformValues
88
+ to_build.send(key, unmarshalled_hash)
89
+ else
90
+ decoder = field.metadata.fetch(:format_json, {}).fetch(:decoder, nil)
91
+ final_value = unmarshal_single(field_type, value, decoder)
92
+ to_build.send(key, final_value)
93
+ end
94
+ end
95
+ to_build
96
+ end
97
+ end
98
+
99
+ def initialize
100
+ instance = allocate
101
+ fields.each { |mod| instance.singleton_class.include(mod) }
102
+ instance.send(:initialize)
103
+ end
104
+
105
+ def self.included(base)
106
+ base.extend(ClassMethods)
107
+ end
108
+
109
+ def fields
110
+ self.class.fields
111
+ end
112
+
113
+ def field(field_name)
114
+ fields.each do |f|
115
+ return f if f.name == field_name
116
+ end
117
+ end
118
+
119
+ def marshal_single(field)
120
+ if field.respond_to? :marshal_json
121
+ field.marshal_json(encode: false)
122
+ else
123
+ Utils.val_to_string(field, primitives: false)
124
+ end
125
+ end
126
+
127
+ def marshal_json(encode: true)
128
+ d = {}
129
+ fields.sort_by(&:name).each do |field|
130
+ f = send(field.name)
131
+ next if f.nil?
132
+
133
+ format_json_meta = field.metadata[:format_json]
134
+ if !format_json_meta.nil? && format_json_meta.include?(:letter_case)
135
+ key = format_json_meta[:letter_case].call(field.name)
136
+ else
137
+ key = field.name
138
+ end
139
+ if f.is_a? Array
140
+ d[key] = f.map { |o| marshal_single(o) }
141
+ elsif f.is_a? Hash
142
+ d[key] = f.map { |k, v| [k, marshal_single(v)] }
143
+ else
144
+ d[key] = marshal_single(f)
145
+ end
146
+ end
147
+ if encode
148
+ JSON.dump(d)
149
+ else
150
+ d
151
+ end
152
+ end
153
+ end
154
+ end