Class: NatsWork::Protocol::TypeMapper

Inherits:
Object
  • Object
show all
Defined in:
lib/natswork/protocol.rb

Overview

Type mapper for cross-language support

Constant Summary collapse

RUBY_TO_PYTHON =

Ruby to Python type mapping

{
  'NilClass' => 'None',
  'TrueClass' => 'bool',
  'FalseClass' => 'bool',
  'Integer' => 'int',
  'Float' => 'float',
  'String' => 'str',
  'Symbol' => 'str',
  'Array' => 'list',
  'Hash' => 'dict',
  'Time' => 'datetime',
  'Date' => 'date',
  'DateTime' => 'datetime'
}.freeze
PYTHON_TO_RUBY =

Python to Ruby type mapping

{
  'None' => 'nil',
  'bool' => 'Boolean',
  'int' => 'Integer',
  'float' => 'Float',
  'str' => 'String',
  'list' => 'Array',
  'tuple' => 'Array',
  'dict' => 'Hash',
  'datetime' => 'Time',
  'date' => 'Date',
  'bytes' => 'String'
}.freeze

Class Method Summary collapse

Class Method Details

.deserialize_from_language(value, source_language) ⇒ Object



374
375
376
377
378
379
380
381
# File 'lib/natswork/protocol.rb', line 374

def self.deserialize_from_language(value, source_language)
  case source_language.downcase
  when 'python'
    deserialize_from_python(value)
  else
    value
  end
end

.deserialize_from_python(value) ⇒ Object



383
384
385
386
387
388
389
# File 'lib/natswork/protocol.rb', line 383

def self.deserialize_from_python(value)
  if value.is_a?(String) && value =~ /^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}/
    Time.parse(value)
  else
    value
  end
end

.serialize_for_go(value) ⇒ Object



361
362
363
364
365
366
367
368
369
370
371
372
# File 'lib/natswork/protocol.rb', line 361

def self.serialize_for_go(value)
  case value
  when Time, DateTime
    value.utc.iso8601
  when Date
    value.iso8601
  when Symbol
    value.to_s
  else
    value
  end
end

.serialize_for_javascript(value) ⇒ Object



346
347
348
349
350
351
352
353
354
355
356
357
358
359
# File 'lib/natswork/protocol.rb', line 346

def self.serialize_for_javascript(value)
  case value
  when Time, DateTime
    value.utc.iso8601
  when Date
    value.iso8601
  when Symbol
    value.to_s
  when BigDecimal
    value.to_f
  else
    value
  end
end

.serialize_for_language(value, target_language) ⇒ Object



318
319
320
321
322
323
324
325
326
327
328
329
# File 'lib/natswork/protocol.rb', line 318

def self.serialize_for_language(value, target_language)
  case target_language.downcase
  when 'python'
    serialize_for_python(value)
  when 'javascript', 'node', 'nodejs'
    serialize_for_javascript(value)
  when 'go', 'golang'
    serialize_for_go(value)
  else
    value
  end
end

.serialize_for_python(value) ⇒ Object



331
332
333
334
335
336
337
338
339
340
341
342
343
344
# File 'lib/natswork/protocol.rb', line 331

def self.serialize_for_python(value)
  case value
  when Time, DateTime
    value.utc.iso8601
  when Date
    value.iso8601
  when Symbol
    value.to_s
  when nil
    nil
  else
    value
  end
end