Module: Erlang

Defined in:
lib/erlang/etf.rb,
lib/erlang/etf/fun.rb,
lib/erlang/etf/map.rb,
lib/erlang/etf/nil.rb,
lib/erlang/etf/pid.rb,
lib/erlang/etf/atom.rb,
lib/erlang/etf/list.rb,
lib/erlang/etf/port.rb,
lib/erlang/etf/term.rb,
lib/erlang/etf/float.rb,
lib/erlang/etf/binary.rb,
lib/erlang/etf/export.rb,
lib/erlang/etf/string.rb,
lib/erlang/etf/integer.rb,
lib/erlang/etf/new_fun.rb,
lib/erlang/etf/version.rb,
lib/erlang/etf/atom_utf8.rb,
lib/erlang/etf/large_big.rb,
lib/erlang/etf/new_float.rb,
lib/erlang/etf/reference.rb,
lib/erlang/etf/small_big.rb,
lib/erlang/etf/bit_binary.rb,
lib/erlang/etf/compressed.rb,
lib/erlang/etf/small_atom.rb,
lib/erlang/etf/large_tuple.rb,
lib/erlang/etf/small_tuple.rb,
lib/erlang/etf/new_reference.rb,
lib/erlang/etf/small_integer.rb,
lib/erlang/etf/small_atom_utf8.rb

Defined Under Namespace

Modules: ETF

Class Method Summary collapse

Class Method Details

.binary_to_term(buffer, etf: false) ⇒ Object



373
374
375
376
# File 'lib/erlang/etf.rb', line 373

def self.binary_to_term(buffer, etf: false)
  buffer = ::StringIO.new(Erlang::ETF::Term.binary_encoding(buffer)) if buffer.respond_to?(:force_encoding)
  return Erlang::ETF.binary_to_term(buffer, etf)
end

.etf(term) ⇒ Object

Raises:

  • (NotImplementedError)


330
331
332
333
334
335
336
337
338
339
340
# File 'lib/erlang/etf.rb', line 330

def self.etf(term)
  return term.to_erlang_etf if term.respond_to?(:to_erlang_etf)
  return term if term.kind_of?(Erlang::ETF::Term)
  term = Erlang.from(term)
  return term.to_erlang_etf if term.respond_to?(:to_erlang_etf)
  type = external_type(term)
  constructor = Erlang::ETF::TYPE[type]
  raise NotImplementedError, "unsupported type #{type.inspect}" if constructor.nil?
  return term if term.kind_of?(constructor)
  return constructor[term]
end

.external_type(term) ⇒ Object

Raises:

  • (NotImplementedError)


342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
# File 'lib/erlang/etf.rb', line 342

def self.external_type(term)
  return term.erlang_external_type if term.respond_to?(:erlang_external_type)
  term = Erlang.from(term)
  return :atom            if Erlang::ETF.is_atom(term)
  return :atom_utf8       if Erlang::ETF.is_atom_utf8(term)
  return :binary          if Erlang::ETF.is_binary(term)
  return :bit_binary      if Erlang::ETF.is_bit_binary(term)
  return :export          if Erlang::ETF.is_export(term)
  return :float           if Erlang::ETF.is_float(term)
  return :fun             if Erlang::ETF.is_fun(term)
  return :integer         if Erlang::ETF.is_integer(term)
  return :large_big       if Erlang::ETF.is_large_big(term)
  return :large_tuple     if Erlang::ETF.is_large_tuple(term)
  return :list            if Erlang::ETF.is_list(term)
  return :map             if Erlang::ETF.is_map(term)
  return :new_float       if Erlang::ETF.is_new_float(term)
  return :new_fun         if Erlang::ETF.is_new_fun(term)
  return :new_reference   if Erlang::ETF.is_new_reference(term)
  return :nil             if Erlang::ETF.is_nil(term)
  return :pid             if Erlang::ETF.is_pid(term)
  return :port            if Erlang::ETF.is_port(term)
  return :reference       if Erlang::ETF.is_reference(term)
  return :small_atom      if Erlang::ETF.is_small_atom(term)
  return :small_atom_utf8 if Erlang::ETF.is_small_atom_utf8(term)
  return :small_big       if Erlang::ETF.is_small_big(term)
  return :small_integer   if Erlang::ETF.is_small_integer(term)
  return :small_tuple     if Erlang::ETF.is_small_tuple(term)
  return :string          if Erlang::ETF.is_string(term)
  raise NotImplementedError
end

.term_to_binary(term, buffer: ::String.new, compressed: false) ⇒ Object



378
379
380
381
382
# File 'lib/erlang/etf.rb', line 378

def self.term_to_binary(term, buffer: ::String.new, compressed: false)
  term = Erlang.etf(term)
  buffer = Erlang::ETF::Term.binary_encoding(buffer)
  return Erlang::ETF.term_to_binary(term, buffer, compressed)
end