coinbase-sdk 0.0.5 → 0.0.6

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 (30) hide show
  1. checksums.yaml +4 -4
  2. data/lib/coinbase/address.rb +63 -44
  3. data/lib/coinbase/authenticator.rb +1 -1
  4. data/lib/coinbase/client/api/server_signers_api.rb +419 -0
  5. data/lib/coinbase/client/api/trades_api.rb +342 -0
  6. data/lib/coinbase/client/models/broadcast_trade_request.rb +222 -0
  7. data/lib/coinbase/client/models/create_address_request.rb +0 -14
  8. data/lib/coinbase/client/models/create_server_signer_request.rb +239 -0
  9. data/lib/coinbase/client/models/create_trade_request.rb +256 -0
  10. data/lib/coinbase/client/models/create_wallet_request.rb +1 -1
  11. data/lib/coinbase/client/models/create_wallet_request_wallet.rb +233 -0
  12. data/lib/coinbase/client/models/seed_creation_event.rb +240 -0
  13. data/lib/coinbase/client/models/seed_creation_event_result.rb +274 -0
  14. data/lib/coinbase/client/models/server_signer.rb +235 -0
  15. data/lib/coinbase/client/models/server_signer_event.rb +239 -0
  16. data/lib/coinbase/client/models/server_signer_event_event.rb +105 -0
  17. data/lib/coinbase/client/models/server_signer_event_list.rb +275 -0
  18. data/lib/coinbase/client/models/signature_creation_event.rb +363 -0
  19. data/lib/coinbase/client/models/signature_creation_event_result.rb +329 -0
  20. data/lib/coinbase/client/models/trade.rb +356 -0
  21. data/lib/coinbase/client/models/trade_list.rb +275 -0
  22. data/lib/coinbase/client/models/transaction.rb +294 -0
  23. data/lib/coinbase/client/models/transaction_type.rb +39 -0
  24. data/lib/coinbase/client/models/wallet.rb +55 -4
  25. data/lib/coinbase/client.rb +18 -0
  26. data/lib/coinbase/transfer.rb +21 -21
  27. data/lib/coinbase/user.rb +14 -89
  28. data/lib/coinbase/wallet.rb +176 -26
  29. data/lib/coinbase.rb +16 -4
  30. metadata +34 -2
@@ -0,0 +1,363 @@
1
+ =begin
2
+ #Coinbase Platform API
3
+
4
+ #This is the OpenAPI 3.0 specification for the Coinbase Platform APIs, used in conjunction with the Coinbase Platform SDKs.
5
+
6
+ The version of the OpenAPI document: 0.0.1-alpha
7
+ Contact: yuga.cohler@coinbase.com
8
+ Generated by: https://openapi-generator.tech
9
+ Generator version: 7.5.0
10
+
11
+ =end
12
+
13
+ require 'date'
14
+ require 'time'
15
+
16
+ module Coinbase::Client
17
+ # An event representing a signature creation.
18
+ class SignatureCreationEvent
19
+ # The ID of the seed that the server-signer should create the signature for
20
+ attr_accessor :seed_id
21
+
22
+ # The ID of the wallet the signature is for
23
+ attr_accessor :wallet_id
24
+
25
+ # The ID of the user that the wallet belongs to
26
+ attr_accessor :wallet_user_id
27
+
28
+ # The ID of the address the transfer belongs to
29
+ attr_accessor :address_id
30
+
31
+ # The index of the address that the server-signer should sign with
32
+ attr_accessor :address_index
33
+
34
+ # The payload that the server-signer should sign
35
+ attr_accessor :signing_payload
36
+
37
+ attr_accessor :transaction_type
38
+
39
+ # The ID of the transaction that the server-signer should sign
40
+ attr_accessor :transaction_id
41
+
42
+ class EnumAttributeValidator
43
+ attr_reader :datatype
44
+ attr_reader :allowable_values
45
+
46
+ def initialize(datatype, allowable_values)
47
+ @allowable_values = allowable_values.map do |value|
48
+ case datatype.to_s
49
+ when /Integer/i
50
+ value.to_i
51
+ when /Float/i
52
+ value.to_f
53
+ else
54
+ value
55
+ end
56
+ end
57
+ end
58
+
59
+ def valid?(value)
60
+ !value || allowable_values.include?(value)
61
+ end
62
+ end
63
+
64
+ # Attribute mapping from ruby-style variable name to JSON key.
65
+ def self.attribute_map
66
+ {
67
+ :'seed_id' => :'seed_id',
68
+ :'wallet_id' => :'wallet_id',
69
+ :'wallet_user_id' => :'wallet_user_id',
70
+ :'address_id' => :'address_id',
71
+ :'address_index' => :'address_index',
72
+ :'signing_payload' => :'signing_payload',
73
+ :'transaction_type' => :'transaction_type',
74
+ :'transaction_id' => :'transaction_id'
75
+ }
76
+ end
77
+
78
+ # Returns all the JSON keys this model knows about
79
+ def self.acceptable_attributes
80
+ attribute_map.values
81
+ end
82
+
83
+ # Attribute type mapping.
84
+ def self.openapi_types
85
+ {
86
+ :'seed_id' => :'String',
87
+ :'wallet_id' => :'String',
88
+ :'wallet_user_id' => :'String',
89
+ :'address_id' => :'String',
90
+ :'address_index' => :'Integer',
91
+ :'signing_payload' => :'String',
92
+ :'transaction_type' => :'TransactionType',
93
+ :'transaction_id' => :'String'
94
+ }
95
+ end
96
+
97
+ # List of attributes with nullable: true
98
+ def self.openapi_nullable
99
+ Set.new([
100
+ ])
101
+ end
102
+
103
+ # Initializes the object
104
+ # @param [Hash] attributes Model attributes in the form of hash
105
+ def initialize(attributes = {})
106
+ if (!attributes.is_a?(Hash))
107
+ fail ArgumentError, "The input argument (attributes) must be a hash in `Coinbase::Client::SignatureCreationEvent` initialize method"
108
+ end
109
+
110
+ # check to see if the attribute exists and convert string to symbol for hash key
111
+ attributes = attributes.each_with_object({}) { |(k, v), h|
112
+ if (!self.class.attribute_map.key?(k.to_sym))
113
+ fail ArgumentError, "`#{k}` is not a valid attribute in `Coinbase::Client::SignatureCreationEvent`. Please check the name to make sure it's valid. List of attributes: " + self.class.attribute_map.keys.inspect
114
+ end
115
+ h[k.to_sym] = v
116
+ }
117
+
118
+ if attributes.key?(:'seed_id')
119
+ self.seed_id = attributes[:'seed_id']
120
+ else
121
+ self.seed_id = nil
122
+ end
123
+
124
+ if attributes.key?(:'wallet_id')
125
+ self.wallet_id = attributes[:'wallet_id']
126
+ else
127
+ self.wallet_id = nil
128
+ end
129
+
130
+ if attributes.key?(:'wallet_user_id')
131
+ self.wallet_user_id = attributes[:'wallet_user_id']
132
+ else
133
+ self.wallet_user_id = nil
134
+ end
135
+
136
+ if attributes.key?(:'address_id')
137
+ self.address_id = attributes[:'address_id']
138
+ else
139
+ self.address_id = nil
140
+ end
141
+
142
+ if attributes.key?(:'address_index')
143
+ self.address_index = attributes[:'address_index']
144
+ else
145
+ self.address_index = nil
146
+ end
147
+
148
+ if attributes.key?(:'signing_payload')
149
+ self.signing_payload = attributes[:'signing_payload']
150
+ else
151
+ self.signing_payload = nil
152
+ end
153
+
154
+ if attributes.key?(:'transaction_type')
155
+ self.transaction_type = attributes[:'transaction_type']
156
+ else
157
+ self.transaction_type = nil
158
+ end
159
+
160
+ if attributes.key?(:'transaction_id')
161
+ self.transaction_id = attributes[:'transaction_id']
162
+ else
163
+ self.transaction_id = nil
164
+ end
165
+ end
166
+
167
+ # Show invalid properties with the reasons. Usually used together with valid?
168
+ # @return Array for valid properties with the reasons
169
+ def list_invalid_properties
170
+ warn '[DEPRECATED] the `list_invalid_properties` method is obsolete'
171
+ invalid_properties = Array.new
172
+ if @seed_id.nil?
173
+ invalid_properties.push('invalid value for "seed_id", seed_id cannot be nil.')
174
+ end
175
+
176
+ if @wallet_id.nil?
177
+ invalid_properties.push('invalid value for "wallet_id", wallet_id cannot be nil.')
178
+ end
179
+
180
+ if @wallet_user_id.nil?
181
+ invalid_properties.push('invalid value for "wallet_user_id", wallet_user_id cannot be nil.')
182
+ end
183
+
184
+ if @address_id.nil?
185
+ invalid_properties.push('invalid value for "address_id", address_id cannot be nil.')
186
+ end
187
+
188
+ if @address_index.nil?
189
+ invalid_properties.push('invalid value for "address_index", address_index cannot be nil.')
190
+ end
191
+
192
+ if @signing_payload.nil?
193
+ invalid_properties.push('invalid value for "signing_payload", signing_payload cannot be nil.')
194
+ end
195
+
196
+ if @transaction_type.nil?
197
+ invalid_properties.push('invalid value for "transaction_type", transaction_type cannot be nil.')
198
+ end
199
+
200
+ if @transaction_id.nil?
201
+ invalid_properties.push('invalid value for "transaction_id", transaction_id cannot be nil.')
202
+ end
203
+
204
+ invalid_properties
205
+ end
206
+
207
+ # Check to see if the all the properties in the model are valid
208
+ # @return true if the model is valid
209
+ def valid?
210
+ warn '[DEPRECATED] the `valid?` method is obsolete'
211
+ return false if @seed_id.nil?
212
+ return false if @wallet_id.nil?
213
+ return false if @wallet_user_id.nil?
214
+ return false if @address_id.nil?
215
+ return false if @address_index.nil?
216
+ return false if @signing_payload.nil?
217
+ return false if @transaction_type.nil?
218
+ return false if @transaction_id.nil?
219
+ true
220
+ end
221
+
222
+ # Checks equality by comparing each attribute.
223
+ # @param [Object] Object to be compared
224
+ def ==(o)
225
+ return true if self.equal?(o)
226
+ self.class == o.class &&
227
+ seed_id == o.seed_id &&
228
+ wallet_id == o.wallet_id &&
229
+ wallet_user_id == o.wallet_user_id &&
230
+ address_id == o.address_id &&
231
+ address_index == o.address_index &&
232
+ signing_payload == o.signing_payload &&
233
+ transaction_type == o.transaction_type &&
234
+ transaction_id == o.transaction_id
235
+ end
236
+
237
+ # @see the `==` method
238
+ # @param [Object] Object to be compared
239
+ def eql?(o)
240
+ self == o
241
+ end
242
+
243
+ # Calculates hash code according to all attributes.
244
+ # @return [Integer] Hash code
245
+ def hash
246
+ [seed_id, wallet_id, wallet_user_id, address_id, address_index, signing_payload, transaction_type, transaction_id].hash
247
+ end
248
+
249
+ # Builds the object from hash
250
+ # @param [Hash] attributes Model attributes in the form of hash
251
+ # @return [Object] Returns the model itself
252
+ def self.build_from_hash(attributes)
253
+ return nil unless attributes.is_a?(Hash)
254
+ attributes = attributes.transform_keys(&:to_sym)
255
+ transformed_hash = {}
256
+ openapi_types.each_pair do |key, type|
257
+ if attributes.key?(attribute_map[key]) && attributes[attribute_map[key]].nil?
258
+ transformed_hash["#{key}"] = nil
259
+ elsif type =~ /\AArray<(.*)>/i
260
+ # check to ensure the input is an array given that the attribute
261
+ # is documented as an array but the input is not
262
+ if attributes[attribute_map[key]].is_a?(Array)
263
+ transformed_hash["#{key}"] = attributes[attribute_map[key]].map { |v| _deserialize($1, v) }
264
+ end
265
+ elsif !attributes[attribute_map[key]].nil?
266
+ transformed_hash["#{key}"] = _deserialize(type, attributes[attribute_map[key]])
267
+ end
268
+ end
269
+ new(transformed_hash)
270
+ end
271
+
272
+ # Deserializes the data based on type
273
+ # @param string type Data type
274
+ # @param string value Value to be deserialized
275
+ # @return [Object] Deserialized data
276
+ def self._deserialize(type, value)
277
+ case type.to_sym
278
+ when :Time
279
+ Time.parse(value)
280
+ when :Date
281
+ Date.parse(value)
282
+ when :String
283
+ value.to_s
284
+ when :Integer
285
+ value.to_i
286
+ when :Float
287
+ value.to_f
288
+ when :Boolean
289
+ if value.to_s =~ /\A(true|t|yes|y|1)\z/i
290
+ true
291
+ else
292
+ false
293
+ end
294
+ when :Object
295
+ # generic object (usually a Hash), return directly
296
+ value
297
+ when /\AArray<(?<inner_type>.+)>\z/
298
+ inner_type = Regexp.last_match[:inner_type]
299
+ value.map { |v| _deserialize(inner_type, v) }
300
+ when /\AHash<(?<k_type>.+?), (?<v_type>.+)>\z/
301
+ k_type = Regexp.last_match[:k_type]
302
+ v_type = Regexp.last_match[:v_type]
303
+ {}.tap do |hash|
304
+ value.each do |k, v|
305
+ hash[_deserialize(k_type, k)] = _deserialize(v_type, v)
306
+ end
307
+ end
308
+ else # model
309
+ # models (e.g. Pet) or oneOf
310
+ klass = Coinbase::Client.const_get(type)
311
+ klass.respond_to?(:openapi_any_of) || klass.respond_to?(:openapi_one_of) ? klass.build(value) : klass.build_from_hash(value)
312
+ end
313
+ end
314
+
315
+ # Returns the string representation of the object
316
+ # @return [String] String presentation of the object
317
+ def to_s
318
+ to_hash.to_s
319
+ end
320
+
321
+ # to_body is an alias to to_hash (backward compatibility)
322
+ # @return [Hash] Returns the object in the form of hash
323
+ def to_body
324
+ to_hash
325
+ end
326
+
327
+ # Returns the object in the form of hash
328
+ # @return [Hash] Returns the object in the form of hash
329
+ def to_hash
330
+ hash = {}
331
+ self.class.attribute_map.each_pair do |attr, param|
332
+ value = self.send(attr)
333
+ if value.nil?
334
+ is_nullable = self.class.openapi_nullable.include?(attr)
335
+ next if !is_nullable || (is_nullable && !instance_variable_defined?(:"@#{attr}"))
336
+ end
337
+
338
+ hash[param] = _to_hash(value)
339
+ end
340
+ hash
341
+ end
342
+
343
+ # Outputs non-array value in the form of hash
344
+ # For object, use to_hash. Otherwise, just return the value
345
+ # @param [Object] value Any valid value
346
+ # @return [Hash] Returns the value in the form of hash
347
+ def _to_hash(value)
348
+ if value.is_a?(Array)
349
+ value.compact.map { |v| _to_hash(v) }
350
+ elsif value.is_a?(Hash)
351
+ {}.tap do |hash|
352
+ value.each { |k, v| hash[k] = _to_hash(v) }
353
+ end
354
+ elsif value.respond_to? :to_hash
355
+ value.to_hash
356
+ else
357
+ value
358
+ end
359
+ end
360
+
361
+ end
362
+
363
+ end
@@ -0,0 +1,329 @@
1
+ =begin
2
+ #Coinbase Platform API
3
+
4
+ #This is the OpenAPI 3.0 specification for the Coinbase Platform APIs, used in conjunction with the Coinbase Platform SDKs.
5
+
6
+ The version of the OpenAPI document: 0.0.1-alpha
7
+ Contact: yuga.cohler@coinbase.com
8
+ Generated by: https://openapi-generator.tech
9
+ Generator version: 7.5.0
10
+
11
+ =end
12
+
13
+ require 'date'
14
+ require 'time'
15
+
16
+ module Coinbase::Client
17
+ # The result to a SignatureCreationEvent.
18
+ class SignatureCreationEventResult
19
+ # The ID of the wallet that the event was created for.
20
+ attr_accessor :wallet_id
21
+
22
+ # The ID of the user that the wallet belongs to
23
+ attr_accessor :wallet_user_id
24
+
25
+ # The ID of the address the transfer belongs to
26
+ attr_accessor :address_id
27
+
28
+ attr_accessor :transaction_type
29
+
30
+ # The ID of the transaction that the Server-Signer has signed for
31
+ attr_accessor :transaction_id
32
+
33
+ # The signature created by the server-signer.
34
+ attr_accessor :signature
35
+
36
+ class EnumAttributeValidator
37
+ attr_reader :datatype
38
+ attr_reader :allowable_values
39
+
40
+ def initialize(datatype, allowable_values)
41
+ @allowable_values = allowable_values.map do |value|
42
+ case datatype.to_s
43
+ when /Integer/i
44
+ value.to_i
45
+ when /Float/i
46
+ value.to_f
47
+ else
48
+ value
49
+ end
50
+ end
51
+ end
52
+
53
+ def valid?(value)
54
+ !value || allowable_values.include?(value)
55
+ end
56
+ end
57
+
58
+ # Attribute mapping from ruby-style variable name to JSON key.
59
+ def self.attribute_map
60
+ {
61
+ :'wallet_id' => :'wallet_id',
62
+ :'wallet_user_id' => :'wallet_user_id',
63
+ :'address_id' => :'address_id',
64
+ :'transaction_type' => :'transaction_type',
65
+ :'transaction_id' => :'transaction_id',
66
+ :'signature' => :'signature'
67
+ }
68
+ end
69
+
70
+ # Returns all the JSON keys this model knows about
71
+ def self.acceptable_attributes
72
+ attribute_map.values
73
+ end
74
+
75
+ # Attribute type mapping.
76
+ def self.openapi_types
77
+ {
78
+ :'wallet_id' => :'String',
79
+ :'wallet_user_id' => :'String',
80
+ :'address_id' => :'String',
81
+ :'transaction_type' => :'TransactionType',
82
+ :'transaction_id' => :'String',
83
+ :'signature' => :'String'
84
+ }
85
+ end
86
+
87
+ # List of attributes with nullable: true
88
+ def self.openapi_nullable
89
+ Set.new([
90
+ ])
91
+ end
92
+
93
+ # Initializes the object
94
+ # @param [Hash] attributes Model attributes in the form of hash
95
+ def initialize(attributes = {})
96
+ if (!attributes.is_a?(Hash))
97
+ fail ArgumentError, "The input argument (attributes) must be a hash in `Coinbase::Client::SignatureCreationEventResult` initialize method"
98
+ end
99
+
100
+ # check to see if the attribute exists and convert string to symbol for hash key
101
+ attributes = attributes.each_with_object({}) { |(k, v), h|
102
+ if (!self.class.attribute_map.key?(k.to_sym))
103
+ fail ArgumentError, "`#{k}` is not a valid attribute in `Coinbase::Client::SignatureCreationEventResult`. Please check the name to make sure it's valid. List of attributes: " + self.class.attribute_map.keys.inspect
104
+ end
105
+ h[k.to_sym] = v
106
+ }
107
+
108
+ if attributes.key?(:'wallet_id')
109
+ self.wallet_id = attributes[:'wallet_id']
110
+ else
111
+ self.wallet_id = nil
112
+ end
113
+
114
+ if attributes.key?(:'wallet_user_id')
115
+ self.wallet_user_id = attributes[:'wallet_user_id']
116
+ else
117
+ self.wallet_user_id = nil
118
+ end
119
+
120
+ if attributes.key?(:'address_id')
121
+ self.address_id = attributes[:'address_id']
122
+ else
123
+ self.address_id = nil
124
+ end
125
+
126
+ if attributes.key?(:'transaction_type')
127
+ self.transaction_type = attributes[:'transaction_type']
128
+ else
129
+ self.transaction_type = nil
130
+ end
131
+
132
+ if attributes.key?(:'transaction_id')
133
+ self.transaction_id = attributes[:'transaction_id']
134
+ else
135
+ self.transaction_id = nil
136
+ end
137
+
138
+ if attributes.key?(:'signature')
139
+ self.signature = attributes[:'signature']
140
+ else
141
+ self.signature = nil
142
+ end
143
+ end
144
+
145
+ # Show invalid properties with the reasons. Usually used together with valid?
146
+ # @return Array for valid properties with the reasons
147
+ def list_invalid_properties
148
+ warn '[DEPRECATED] the `list_invalid_properties` method is obsolete'
149
+ invalid_properties = Array.new
150
+ if @wallet_id.nil?
151
+ invalid_properties.push('invalid value for "wallet_id", wallet_id cannot be nil.')
152
+ end
153
+
154
+ if @wallet_user_id.nil?
155
+ invalid_properties.push('invalid value for "wallet_user_id", wallet_user_id cannot be nil.')
156
+ end
157
+
158
+ if @address_id.nil?
159
+ invalid_properties.push('invalid value for "address_id", address_id cannot be nil.')
160
+ end
161
+
162
+ if @transaction_type.nil?
163
+ invalid_properties.push('invalid value for "transaction_type", transaction_type cannot be nil.')
164
+ end
165
+
166
+ if @transaction_id.nil?
167
+ invalid_properties.push('invalid value for "transaction_id", transaction_id cannot be nil.')
168
+ end
169
+
170
+ if @signature.nil?
171
+ invalid_properties.push('invalid value for "signature", signature cannot be nil.')
172
+ end
173
+
174
+ invalid_properties
175
+ end
176
+
177
+ # Check to see if the all the properties in the model are valid
178
+ # @return true if the model is valid
179
+ def valid?
180
+ warn '[DEPRECATED] the `valid?` method is obsolete'
181
+ return false if @wallet_id.nil?
182
+ return false if @wallet_user_id.nil?
183
+ return false if @address_id.nil?
184
+ return false if @transaction_type.nil?
185
+ return false if @transaction_id.nil?
186
+ return false if @signature.nil?
187
+ true
188
+ end
189
+
190
+ # Checks equality by comparing each attribute.
191
+ # @param [Object] Object to be compared
192
+ def ==(o)
193
+ return true if self.equal?(o)
194
+ self.class == o.class &&
195
+ wallet_id == o.wallet_id &&
196
+ wallet_user_id == o.wallet_user_id &&
197
+ address_id == o.address_id &&
198
+ transaction_type == o.transaction_type &&
199
+ transaction_id == o.transaction_id &&
200
+ signature == o.signature
201
+ end
202
+
203
+ # @see the `==` method
204
+ # @param [Object] Object to be compared
205
+ def eql?(o)
206
+ self == o
207
+ end
208
+
209
+ # Calculates hash code according to all attributes.
210
+ # @return [Integer] Hash code
211
+ def hash
212
+ [wallet_id, wallet_user_id, address_id, transaction_type, transaction_id, signature].hash
213
+ end
214
+
215
+ # Builds the object from hash
216
+ # @param [Hash] attributes Model attributes in the form of hash
217
+ # @return [Object] Returns the model itself
218
+ def self.build_from_hash(attributes)
219
+ return nil unless attributes.is_a?(Hash)
220
+ attributes = attributes.transform_keys(&:to_sym)
221
+ transformed_hash = {}
222
+ openapi_types.each_pair do |key, type|
223
+ if attributes.key?(attribute_map[key]) && attributes[attribute_map[key]].nil?
224
+ transformed_hash["#{key}"] = nil
225
+ elsif type =~ /\AArray<(.*)>/i
226
+ # check to ensure the input is an array given that the attribute
227
+ # is documented as an array but the input is not
228
+ if attributes[attribute_map[key]].is_a?(Array)
229
+ transformed_hash["#{key}"] = attributes[attribute_map[key]].map { |v| _deserialize($1, v) }
230
+ end
231
+ elsif !attributes[attribute_map[key]].nil?
232
+ transformed_hash["#{key}"] = _deserialize(type, attributes[attribute_map[key]])
233
+ end
234
+ end
235
+ new(transformed_hash)
236
+ end
237
+
238
+ # Deserializes the data based on type
239
+ # @param string type Data type
240
+ # @param string value Value to be deserialized
241
+ # @return [Object] Deserialized data
242
+ def self._deserialize(type, value)
243
+ case type.to_sym
244
+ when :Time
245
+ Time.parse(value)
246
+ when :Date
247
+ Date.parse(value)
248
+ when :String
249
+ value.to_s
250
+ when :Integer
251
+ value.to_i
252
+ when :Float
253
+ value.to_f
254
+ when :Boolean
255
+ if value.to_s =~ /\A(true|t|yes|y|1)\z/i
256
+ true
257
+ else
258
+ false
259
+ end
260
+ when :Object
261
+ # generic object (usually a Hash), return directly
262
+ value
263
+ when /\AArray<(?<inner_type>.+)>\z/
264
+ inner_type = Regexp.last_match[:inner_type]
265
+ value.map { |v| _deserialize(inner_type, v) }
266
+ when /\AHash<(?<k_type>.+?), (?<v_type>.+)>\z/
267
+ k_type = Regexp.last_match[:k_type]
268
+ v_type = Regexp.last_match[:v_type]
269
+ {}.tap do |hash|
270
+ value.each do |k, v|
271
+ hash[_deserialize(k_type, k)] = _deserialize(v_type, v)
272
+ end
273
+ end
274
+ else # model
275
+ # models (e.g. Pet) or oneOf
276
+ klass = Coinbase::Client.const_get(type)
277
+ klass.respond_to?(:openapi_any_of) || klass.respond_to?(:openapi_one_of) ? klass.build(value) : klass.build_from_hash(value)
278
+ end
279
+ end
280
+
281
+ # Returns the string representation of the object
282
+ # @return [String] String presentation of the object
283
+ def to_s
284
+ to_hash.to_s
285
+ end
286
+
287
+ # to_body is an alias to to_hash (backward compatibility)
288
+ # @return [Hash] Returns the object in the form of hash
289
+ def to_body
290
+ to_hash
291
+ end
292
+
293
+ # Returns the object in the form of hash
294
+ # @return [Hash] Returns the object in the form of hash
295
+ def to_hash
296
+ hash = {}
297
+ self.class.attribute_map.each_pair do |attr, param|
298
+ value = self.send(attr)
299
+ if value.nil?
300
+ is_nullable = self.class.openapi_nullable.include?(attr)
301
+ next if !is_nullable || (is_nullable && !instance_variable_defined?(:"@#{attr}"))
302
+ end
303
+
304
+ hash[param] = _to_hash(value)
305
+ end
306
+ hash
307
+ end
308
+
309
+ # Outputs non-array value in the form of hash
310
+ # For object, use to_hash. Otherwise, just return the value
311
+ # @param [Object] value Any valid value
312
+ # @return [Hash] Returns the value in the form of hash
313
+ def _to_hash(value)
314
+ if value.is_a?(Array)
315
+ value.compact.map { |v| _to_hash(v) }
316
+ elsif value.is_a?(Hash)
317
+ {}.tap do |hash|
318
+ value.each { |k, v| hash[k] = _to_hash(v) }
319
+ end
320
+ elsif value.respond_to? :to_hash
321
+ value.to_hash
322
+ else
323
+ value
324
+ end
325
+ end
326
+
327
+ end
328
+
329
+ end