27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
|
# File 'lib/erlang/etf/term.rb', line 27
def term(name, options = {})
if options.key?(:always)
__define_always__(name, options[:always])
else
if options.key?(:default)
__define_default__(name, options[:default])
else
attr_accessor name
end
if options[:type] == :array
class_eval " def deserialize_\#{name}(buffer)\n raise NotImplementedError\n end\n RUBY\n else\n class_eval <<-RUBY, __FILE__, __LINE__ + 1\n def deserialize_\#{name}(buffer)\n self.\#{name} = Terms.deserialize(buffer)\n end\n RUBY\n end\n end\n\n if options[:type] == :array\n class_eval <<-RUBY, __FILE__, __LINE__ + 1\n def serialize_\#{name}(buffer)\n \#{name}.each do |term|\n term.serialize(buffer)\n end\n end\n RUBY\n else\n class_eval <<-RUBY, __FILE__, __LINE__ + 1\n def serialize_\#{name}(buffer)\n \#{name}.serialize(buffer)\n end\n RUBY\n end\n\n serialization << :\"serialize_\#{name}\"\n fields << name\nend\n", __FILE__, __LINE__ + 1
|