protobuf 3.7.5 → 3.8.0.pre1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,168 @@
1
+ require 'spec_helper'
2
+
3
+ RSpec.describe Protobuf::Field::FieldHash do
4
+
5
+ let(:basic_message) do
6
+ Class.new(::Protobuf::Message) do
7
+ optional :string, :field, 1
8
+ end
9
+ end
10
+
11
+ let(:more_complex_message) do
12
+ Class.new(BasicMessage) do
13
+ end
14
+ end
15
+
16
+ let(:some_enum) do
17
+ Class.new(::Protobuf::Enum) do
18
+ define :FOO, 1
19
+ define :BAR, 2
20
+ define :BAZ, 3
21
+ end
22
+ end
23
+
24
+ let(:map_message) do
25
+ Class.new(::Protobuf::Message) do
26
+ optional :string, :some_string, 1
27
+ map :int32, :string, :map_int32_to_string, 2
28
+ map :string, BasicMessage, :map_string_to_msg, 3
29
+ map :string, SomeEnum, :map_string_to_enum, 4
30
+ end
31
+ end
32
+
33
+ before do
34
+ stub_const('BasicMessage', basic_message)
35
+ stub_const('MoreComplexMessage', more_complex_message)
36
+ stub_const('SomeEnum', some_enum)
37
+ stub_const('SomeMapMessage', map_message)
38
+ end
39
+
40
+ let(:instance) { SomeMapMessage.new }
41
+
42
+ %w([]= store).each do |method|
43
+ describe "##{method}" do
44
+ context 'when applied to an int32->string field hash' do
45
+ it 'adds an int -> string entry' do
46
+ expect(instance.map_int32_to_string).to be_empty
47
+ instance.map_int32_to_string.send(method, 1, 'string 1')
48
+ expect(instance.map_int32_to_string).to eq(1 => 'string 1')
49
+ instance.map_int32_to_string.send(method, 2, 'string 2')
50
+ expect(instance.map_int32_to_string).to eq(1 => 'string 1', 2 => 'string 2')
51
+ end
52
+
53
+ it 'fails if not adding an int -> string' do
54
+ expect { instance.map_int32_to_string.send(method, 1, 100.0) }.to raise_error(TypeError)
55
+ expect { instance.map_int32_to_string.send(method, 'foo', 100.0) }.to raise_error(TypeError)
56
+ expect { instance.map_int32_to_string.send(method, BasicMessage.new, 100.0) }.to raise_error(TypeError)
57
+ expect { instance.map_int32_to_string.send(method, 'foo', 'bar') }.to raise_error(TypeError)
58
+ expect { instance.map_int32_to_string.send(method, nil, 'foo') }.to raise_error(TypeError)
59
+ expect { instance.map_int32_to_string.send(method, 1, nil) }.to raise_error(TypeError)
60
+ end
61
+ end
62
+
63
+ context 'when applied to a string->MessageField field hash' do
64
+ it 'adds a string -> MessageField entry' do
65
+ expect(instance.map_string_to_msg).to be_empty
66
+ basic_msg1 = BasicMessage.new
67
+ instance.map_string_to_msg.send(method, 'msg1', basic_msg1)
68
+ expect(instance.map_string_to_msg).to eq('msg1' => basic_msg1)
69
+ basic_msg2 = BasicMessage.new
70
+ instance.map_string_to_msg.send(method, 'msg2', basic_msg2)
71
+ expect(instance.map_string_to_msg).to eq('msg1' => basic_msg1, 'msg2' => basic_msg2)
72
+ end
73
+
74
+ it 'fails if not adding a string -> MessageField entry' do
75
+ expect { instance.map_string_to_msg.send(method, 1, 100.0) }.to raise_error(TypeError)
76
+ expect { instance.map_string_to_msg.send(method, 'foo', SomeEnum::FOO) }.to raise_error(TypeError)
77
+ expect { instance.map_string_to_msg.send(method, SomeEnum::FOO, BasicMessage.new) }.to raise_error(TypeError)
78
+ expect { instance.map_string_to_msg.send(method, nil, BasicMessage.new) }.to raise_error(TypeError)
79
+ expect { instance.map_string_to_msg.send(method, 'foo', nil) }.to raise_error(TypeError)
80
+ end
81
+
82
+ it 'adds a Hash from a MessageField object' do
83
+ expect(instance.map_string_to_msg).to be_empty
84
+ basic_msg1 = BasicMessage.new
85
+ basic_msg1.field = 'my value'
86
+ instance.map_string_to_msg.send(method, 'foo', basic_msg1.to_hash)
87
+ expect(instance.map_string_to_msg).to eq('foo' => basic_msg1)
88
+ end
89
+
90
+ it 'does not downcast a MessageField' do
91
+ expect(instance.map_string_to_msg).to be_empty
92
+ basic_msg1 = MoreComplexMessage.new
93
+ instance.map_string_to_msg.send(method, 'foo', basic_msg1)
94
+ expect(instance.map_string_to_msg).to eq('foo' => basic_msg1)
95
+ expect(instance.map_string_to_msg['foo']).to be_a(MoreComplexMessage)
96
+ end
97
+ end
98
+
99
+ context 'when applied to a string->EnumField field hash' do
100
+ it 'adds a string -> EnumField entry' do
101
+ expect(instance.map_string_to_enum).to be_empty
102
+ instance.map_string_to_enum.send(method, 'msg1', SomeEnum::FOO)
103
+ expect(instance.map_string_to_enum).to eq('msg1' => SomeEnum::FOO)
104
+ instance.map_string_to_enum.send(method, 'msg2', SomeEnum::BAR)
105
+ expect(instance.map_string_to_enum).to eq('msg1' => SomeEnum::FOO, 'msg2' => SomeEnum::BAR)
106
+ end
107
+
108
+ it 'fails if not adding a string -> EnumField entry' do
109
+ expect { instance.map_string_to_enum.send(method, 1, 100.0) }.to raise_error(TypeError)
110
+ expect { instance.map_string_to_enum.send(method, nil, 100.0) }.to raise_error(TypeError)
111
+ expect { instance.map_string_to_enum.send(method, 1, nil) }.to raise_error(TypeError)
112
+ expect { instance.map_string_to_enum.send(method, 'foo', BasicMessage.new) }.to raise_error(TypeError)
113
+ expect { instance.map_string_to_enum.send(method, 1, SomeEnum::FOO) }.to raise_error(TypeError)
114
+ expect { instance.map_string_to_enum.send(method, nil, SomeEnum::FOO) }.to raise_error(TypeError)
115
+ expect { instance.map_string_to_enum.send(method, 'foo', nil) }.to raise_error(TypeError)
116
+ end
117
+ end
118
+ end
119
+
120
+ describe '#to_hash_value' do
121
+ context 'when applied to an int32->string field hash' do
122
+ before do
123
+ instance.map_int32_to_string[1] = 'string 1'
124
+ instance.map_int32_to_string[2] = 'string 2'
125
+ end
126
+
127
+ it 'converts properly' do
128
+ expect(instance.to_hash_value).to eq(:map_int32_to_string => {
129
+ 1 => 'string 1',
130
+ 2 => 'string 2',
131
+ })
132
+ end
133
+ end
134
+
135
+ context 'when applied to a string->MessageField field hash' do
136
+ before do
137
+ instance.map_string_to_msg['msg1'] = BasicMessage.new(:field => 'string 1')
138
+ instance.map_string_to_msg['msg2'] = BasicMessage.new(:field => 'string 2')
139
+ end
140
+
141
+ it 'converts properly' do
142
+ expect(instance.to_hash_value).to eq(:map_string_to_msg => {
143
+ 'msg1' => {
144
+ :field => 'string 1',
145
+ },
146
+ 'msg2' => {
147
+ :field => 'string 2',
148
+ },
149
+ })
150
+ end
151
+ end
152
+
153
+ context 'when applied to a string->EnumField field hash' do
154
+ before do
155
+ instance.map_string_to_enum['msg1'] = SomeEnum::FOO
156
+ instance.map_string_to_enum['msg2'] = SomeEnum::BAR
157
+ end
158
+
159
+ it 'converts properly' do
160
+ expect(instance.to_hash_value).to eq(:map_string_to_enum => {
161
+ 'msg1' => 1,
162
+ 'msg2' => 2,
163
+ })
164
+ end
165
+ end
166
+ end
167
+ end
168
+ end
@@ -15,9 +15,9 @@ RSpec.describe ::Protobuf::Generators::ExtensionGenerator do
15
15
  let(:message_type) { 'FooBar' }
16
16
 
17
17
  before do
18
- expect(::Protobuf::Generators::FieldGenerator).to receive(:new).with(field_descriptors[0], 1).and_return(field_descriptors[0])
19
- expect(::Protobuf::Generators::FieldGenerator).to receive(:new).with(field_descriptors[1], 1).and_return(field_descriptors[1])
20
- expect(::Protobuf::Generators::FieldGenerator).to receive(:new).with(field_descriptors[2], 1).and_return(field_descriptors[2])
18
+ expect(::Protobuf::Generators::FieldGenerator).to receive(:new).with(field_descriptors[0], nil, 1).and_return(field_descriptors[0])
19
+ expect(::Protobuf::Generators::FieldGenerator).to receive(:new).with(field_descriptors[1], nil, 1).and_return(field_descriptors[1])
20
+ expect(::Protobuf::Generators::FieldGenerator).to receive(:new).with(field_descriptors[2], nil, 1).and_return(field_descriptors[2])
21
21
  end
22
22
 
23
23
  subject { described_class.new(message_type, field_descriptors, 0) }
@@ -25,32 +25,41 @@ RSpec.describe ::Protobuf::Generators::FieldGenerator do
25
25
  :options => field_options,
26
26
  }
27
27
  end
28
-
29
28
  let(:field) { ::Google::Protobuf::FieldDescriptorProto.new(field_fields) }
30
29
 
30
+ let(:nested_types) { [] }
31
+ let(:owner_fields) do
32
+ {
33
+ :name => 'Baz',
34
+ :field => [field],
35
+ :nested_type => nested_types,
36
+ }
37
+ end
38
+ let(:owner_msg) { ::Google::Protobuf::DescriptorProto.new(owner_fields) }
39
+
31
40
  describe '#compile' do
32
- subject { described_class.new(field).to_s }
41
+ subject { described_class.new(field, owner_msg, 1).to_s }
33
42
 
34
- specify { expect(subject).to eq "optional :string, :foo_bar, 3\n" }
43
+ specify { expect(subject).to eq " optional :string, :foo_bar, 3\n" }
35
44
 
36
45
  context 'when the type is another message' do
37
46
  let(:type_enum) { :TYPE_MESSAGE }
38
47
  let(:type_name) { '.foo.bar.Baz' }
39
48
 
40
- specify { expect(subject).to eq "optional ::Foo::Bar::Baz, :foo_bar, 3\n" }
49
+ specify { expect(subject).to eq " optional ::Foo::Bar::Baz, :foo_bar, 3\n" }
41
50
  end
42
51
 
43
52
  context 'when a default value is used' do
44
53
  let(:type_enum) { :TYPE_INT32 }
45
54
  let(:default_value) { '42' }
46
- specify { expect(subject).to eq "optional :int32, :foo_bar, 3, :default => 42\n" }
55
+ specify { expect(subject).to eq " optional :int32, :foo_bar, 3, :default => 42\n" }
47
56
 
48
57
  context 'when type is an enum' do
49
58
  let(:type_enum) { :TYPE_ENUM }
50
59
  let(:type_name) { '.foo.bar.Baz' }
51
60
  let(:default_value) { 'QUUX' }
52
61
 
53
- specify { expect(subject).to eq "optional ::Foo::Bar::Baz, :foo_bar, 3, :default => ::Foo::Bar::Baz::QUUX\n" }
62
+ specify { expect(subject).to eq " optional ::Foo::Bar::Baz, :foo_bar, 3, :default => ::Foo::Bar::Baz::QUUX\n" }
54
63
  end
55
64
 
56
65
  context 'when type is an enum with lowercase default value with PB_UPCASE_ENUMS set' do
@@ -59,14 +68,14 @@ RSpec.describe ::Protobuf::Generators::FieldGenerator do
59
68
  let(:default_value) { 'quux' }
60
69
  before { allow(ENV).to receive(:key?).with('PB_UPCASE_ENUMS').and_return(true) }
61
70
 
62
- specify { expect(subject).to eq "optional ::Foo::Bar::Baz, :foo_bar, 3, :default => ::Foo::Bar::Baz::QUUX\n" }
71
+ specify { expect(subject).to eq " optional ::Foo::Bar::Baz, :foo_bar, 3, :default => ::Foo::Bar::Baz::QUUX\n" }
63
72
  end
64
73
 
65
74
  context 'when the type is a string' do
66
75
  let(:type_enum) { :TYPE_STRING }
67
76
  let(:default_value) { "a default \"string\"" }
68
77
 
69
- specify { expect(subject).to eq "optional :string, :foo_bar, 3, :default => \"a default \"string\"\"\n" }
78
+ specify { expect(subject).to eq " optional :string, :foo_bar, 3, :default => \"a default \"string\"\"\n" }
70
79
  end
71
80
 
72
81
  context 'when float or double field type' do
@@ -92,19 +101,47 @@ RSpec.describe ::Protobuf::Generators::FieldGenerator do
92
101
  context 'when the field is an extension' do
93
102
  let(:extendee) { 'foo.bar.Baz' }
94
103
 
95
- specify { expect(subject).to eq "optional :string, :foo_bar, 3, :extension => true\n" }
104
+ specify { expect(subject).to eq " optional :string, :foo_bar, 3, :extension => true\n" }
96
105
  end
97
106
 
98
107
  context 'when field is packed' do
99
108
  let(:field_options) { { :packed => true } }
100
109
 
101
- specify { expect(subject).to eq "optional :string, :foo_bar, 3, :packed => true\n" }
110
+ specify { expect(subject).to eq " optional :string, :foo_bar, 3, :packed => true\n" }
111
+ end
112
+
113
+ context 'when field is a map' do
114
+ let(:type_enum) { :TYPE_MESSAGE }
115
+ let(:type_name) { '.foo.bar.Baz.FooBarEntry' }
116
+ let(:label_enum) { :LABEL_REPEATED }
117
+ let(:nested_types) do
118
+ [::Google::Protobuf::DescriptorProto.new(
119
+ :name => 'FooBarEntry',
120
+ :field => [
121
+ ::Google::Protobuf::FieldDescriptorProto.new(
122
+ :label => :LABEL_OPTIONAL,
123
+ :name => 'key',
124
+ :number => 1,
125
+ :type => :TYPE_STRING,
126
+ :type_name => nil),
127
+ ::Google::Protobuf::FieldDescriptorProto.new(
128
+ :label => :LABEL_OPTIONAL,
129
+ :name => 'value',
130
+ :number => 2,
131
+ :type => :TYPE_ENUM,
132
+ :type_name => '.foo.bar.SnafuState'),
133
+ ],
134
+ :options => ::Google::Protobuf::MessageOptions.new(:map_entry => true)),
135
+ ]
136
+ end
137
+
138
+ specify { expect(subject).to eq " map :string, ::Foo::Bar::SnafuState, :foo_bar, 3\n" }
102
139
  end
103
140
 
104
141
  context 'when field is deprecated' do
105
142
  let(:field_options) { { :deprecated => true } }
106
143
 
107
- specify { expect(subject).to eq "optional :string, :foo_bar, 3, :deprecated => true\n" }
144
+ specify { expect(subject).to eq " optional :string, :foo_bar, 3, :deprecated => true\n" }
108
145
  end
109
146
 
110
147
  context 'when field uses a custom option that is an extension' do
@@ -128,31 +165,31 @@ RSpec.describe ::Protobuf::Generators::FieldGenerator do
128
165
  describe 'option has a string value' do
129
166
  let(:field_options) { { :custom_string_option => 'boom' } }
130
167
 
131
- specify { expect(subject).to eq "optional :string, :foo_bar, 3, :custom_string_option => \"boom\"\n" }
168
+ specify { expect(subject).to eq " optional :string, :foo_bar, 3, :custom_string_option => \"boom\"\n" }
132
169
  end
133
170
 
134
171
  describe 'option has a bool value' do
135
172
  let(:field_options) { { :custom_bool_option => true } }
136
173
 
137
- specify { expect(subject).to eq "optional :string, :foo_bar, 3, :custom_bool_option => true\n" }
174
+ specify { expect(subject).to eq " optional :string, :foo_bar, 3, :custom_bool_option => true\n" }
138
175
  end
139
176
 
140
177
  describe 'option has a int32 value' do
141
178
  let(:field_options) { { :custom_int32_option => 123 } }
142
179
 
143
- specify { expect(subject).to eq "optional :string, :foo_bar, 3, :custom_int32_option => 123\n" }
180
+ specify { expect(subject).to eq " optional :string, :foo_bar, 3, :custom_int32_option => 123\n" }
144
181
  end
145
182
 
146
183
  describe 'option has a message value' do
147
184
  let(:field_options) { { :custom_message_option => CustomFieldMessage.new(:foo => 'boom') } }
148
185
 
149
- specify { expect(subject).to eq "optional :string, :foo_bar, 3, :custom_message_option => { :foo => \"boom\" }\n" }
186
+ specify { expect(subject).to eq " optional :string, :foo_bar, 3, :custom_message_option => { :foo => \"boom\" }\n" }
150
187
  end
151
188
 
152
189
  describe 'option has a enum value' do
153
190
  let(:field_options) { { :custom_enum_option => CustomFieldEnum::BAM } }
154
191
 
155
- specify { expect(subject).to eq "optional :string, :foo_bar, 3, :custom_enum_option => ::CustomFieldEnum::BAM\n" }
192
+ specify { expect(subject).to eq " optional :string, :foo_bar, 3, :custom_enum_option => ::CustomFieldEnum::BAM\n" }
156
193
  end
157
194
  end
158
195
  end
@@ -715,6 +715,43 @@ RSpec.describe Protobuf::Message do
715
715
  end
716
716
  end
717
717
 
718
+ describe 'map fields' do
719
+ it 'serializes the same as equivalent non-map-field' do
720
+ class MessageWithMapField < ::Protobuf::Message
721
+ map :int32, :string, :map, 1
722
+ end
723
+
724
+ class MessageWithoutMapField < ::Protobuf::Message
725
+ class MapEntry < ::Protobuf::Message
726
+ optional :int32, :key, 1
727
+ optional :string, :value, 2
728
+ end
729
+ repeated MapEntry, :map, 1
730
+ end
731
+
732
+ map_msg = MessageWithMapField.new(:map =>
733
+ {
734
+ 1 => 'one',
735
+ 2 => 'two',
736
+ 3 => 'three',
737
+ 4 => 'four',
738
+ })
739
+ mapless_msg = MessageWithoutMapField.new(:map =>
740
+ [{ :key => 1, :value => 'one' },
741
+ { :key => 2, :value => 'two' },
742
+ { :key => 3, :value => 'three' },
743
+ { :key => 4, :value => 'four' },
744
+ ])
745
+
746
+ map_bytes = map_msg.encode
747
+ mapless_bytes = mapless_msg.encode
748
+ expect(map_bytes).to eq(mapless_bytes)
749
+
750
+ expect(MessageWithMapField.decode(mapless_bytes)).to eq(map_msg)
751
+ expect(MessageWithoutMapField.decode(map_bytes)).to eq(mapless_msg)
752
+ end
753
+ end
754
+
718
755
  describe '.[]=' do
719
756
  context 'clearing fields' do
720
757
  it 'clears repeated fields with an empty array' do
@@ -86,7 +86,7 @@ RSpec.describe Protobuf::Rpc::Middleware::RequestDecoder do
86
86
  let(:request_wrapper) do
87
87
  ::Protobuf::Socketrpc::Request.new(
88
88
  :caller => client_host,
89
- :service_name => 'Foo',
89
+ :service_name => 'NonexistantService',
90
90
  :method_name => method_name.to_s,
91
91
  :request_proto => request,
92
92
  )
@@ -0,0 +1,157 @@
1
+
2
+ �!
3
+ map-test.protofoo"�
4
+ Baz2
5
+ looks_like_map ( 2.foo.Baz.LooksLikeMapEntry@
6
+ does_not_look_like_map ( 2 .foo.Baz.DoesNotLookLikeMapEntry3
7
+ LooksLikeMapEntry
8
+ key ( 
9
+ value ( :85
10
+ DoesNotLookLikeMapEntry
11
+ key ( 
12
+ value ( "�
13
+ Bar0
14
+
15
+
16
+ int32_to_baz ( 2.foo.Bar.Int32ToBazEntry.
17
+ int64_to_baz ( 2.foo.Bar.Int64ToBazEntry0
18
+
19
+
20
+
21
+ sint32_to_frobnitz ( 2.foo.Bar.Sint32ToFrobnitzEntry:
22
+ sint64_to_frobnitz ( 2.foo.Bar.Sint64ToFrobnitzEntry8
23
+ int32_to_frobnitz
24
+ ( 2.foo.Bar.Int32ToFrobnitzEntry8
25
+ int64_to_frobnitz ( 2.foo.Bar.Int64ToFrobnitzEntry:
26
+ uint32_to_frobnitz ( 2.foo.Bar.Uint32ToFrobnitzEntry:
27
+ uint64_to_frobnitz
28
  ( 2.foo.Bar.Uint64ToFrobnitzEntry:
29
+ string_to_frobnitz ( 2.foo.Bar.StringToFrobnitzEntry6
30
+ sint32_to_string ( 2.foo.Bar.Sint32ToStringEntry6
31
+ sint64_to_string ( 2.foo.Bar.Sint64ToStringEntry4
32
+ int32_to_string ( 2.foo.Bar.Int32ToStringEntry4
33
+ int64_to_string ( 2.foo.Bar.Int64ToStringEntry6
34
+ uint32_to_string ( 2.foo.Bar.Uint32ToStringEntry6
35
+ uint64_to_string ( 2.foo.Bar.Uint64ToStringEntry6
36
+ string_to_string ( 2.foo.Bar.StringToStringEntry4
37
+ sint32_to_float ( 2.foo.Bar.Sint32ToFloatEntry4
38
+ sint64_to_float ( 2.foo.Bar.Sint64ToFloatEntry2
39
+ int32_to_float ( 2.foo.Bar.Int32ToFloatEntry2
40
+ int64_to_float ( 2.foo.Bar.Int64ToFloatEntry4
41
+ uint32_to_float ( 2.foo.Bar.Uint32ToFloatEntry4
42
+ uint64_to_float ( 2.foo.Bar.Uint64ToFloatEntry4
43
+ string_to_float ( 2.foo.Bar.StringToFloatEntry6
44
+ sint32_to_double ( 2.foo.Bar.Sint32ToDoubleEntry6
45
+ sint64_to_double ( 2.foo.Bar.Sint64ToDoubleEntry4
46
+ int32_to_double ( 2.foo.Bar.Int32ToDoubleEntry4
47
+ int64_to_double ( 2.foo.Bar.Int64ToDoubleEntry6
48
+ uint32_to_double! ( 2.foo.Bar.Uint32ToDoubleEntry6
49
+ uint64_to_double" ( 2.foo.Bar.Uint64ToDoubleEntry6
50
+ string_to_double# ( 2.foo.Bar.StringToDoubleEntry<
51
+ Sint32ToBazEntry
52
+ key (
53
+ value ( 2.foo.Baz:8<
54
+ Sint64ToBazEntry
55
+ key (
56
+ value ( 2.foo.Baz:8;
57
+ Int32ToBazEntry
58
+ key (
59
+ value ( 2.foo.Baz:8;
60
+ Int64ToBazEntry
61
+ key (
62
+ value ( 2.foo.Baz:8<
63
+ Uint32ToBazEntry
64
+ key (
65
+ value ( 2.foo.Baz:8<
66
+ Uint64ToBazEntry
67
+ key (
68
+ value ( 2.foo.Baz:8<
69
+ StringToBazEntry
70
+ key ( 
71
+ value ( 2.foo.Baz:8F
72
+ Sint32ToFrobnitzEntry
73
+ key (
74
+ value (2
75
+ Sint64ToFrobnitzEntry
76
+ key (
77
+ value (2
78
+ Int32ToFrobnitzEntry
79
+ key (
80
+ value (2
81
+ Int64ToFrobnitzEntry
82
+ key (
83
+ value (2
84
+ Uint32ToFrobnitzEntry
85
+ key (
86
+ value (2
87
+ Uint64ToFrobnitzEntry
88
+ key (
89
+ value (2
90
+ StringToFrobnitzEntry
91
+ key ( 
92
+ value (2
93
+ Sint32ToStringEntry
94
+ key (
95
+ value ( :85
96
+ Sint64ToStringEntry
97
+ key (
98
+ value ( :84
99
+ Int32ToStringEntry
100
+ key (
101
+ value ( :84
102
+ Int64ToStringEntry
103
+ key (
104
+ value ( :85
105
+ Uint32ToStringEntry
106
+ key (
107
+ value ( :85
108
+ Uint64ToStringEntry
109
+ key (
110
+ value ( :85
111
+ StringToStringEntry
112
+ key ( 
113
+ value ( :84
114
+ Sint32ToFloatEntry
115
+ key (
116
+ value (:84
117
+ Sint64ToFloatEntry
118
+ key (
119
+ value (:83
120
+ Int32ToFloatEntry
121
+ key (
122
+ value (:83
123
+ Int64ToFloatEntry
124
+ key (
125
+ value (:84
126
+ Uint32ToFloatEntry
127
+ key (
128
+ value (:84
129
+ Uint64ToFloatEntry
130
+ key (
131
+ value (:84
132
+ StringToFloatEntry
133
+ key ( 
134
+ value (:85
135
+ Sint32ToDoubleEntry
136
+ key (
137
+ value (:85
138
+ Sint64ToDoubleEntry
139
+ key (
140
+ value (:84
141
+ Int32ToDoubleEntry
142
+ key (
143
+ value (:84
144
+ Int64ToDoubleEntry
145
+ key (
146
+ value (:85
147
+ Uint32ToDoubleEntry
148
+ key (
149
+ value (:85
150
+ Uint64ToDoubleEntry
151
+ key (
152
+ value (:85
153
+ StringToDoubleEntry
154
+ key ( 
155
+ value (:8*
156
+ Frobnitz
157
+ FROB
158
+ NITZ