module Erlang

Public Class Methods

binary_to_term(buffer, etf: false) click to toggle source
# 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) click to toggle source
# 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) click to toggle source
# 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) click to toggle source
# 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