coinbase-sdk 0.0.5 → 0.0.6

Sign up to get free protection for your applications and to get access to all the features.
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