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
- .binary_to_term(buffer, etf: false) ⇒ Object
- .etf(term) ⇒ Object
- .external_type(term) ⇒ Object
- .term_to_binary(term, buffer: ::String.new, compressed: false) ⇒ Object
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
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
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 |